Sortieren einer umgekehrt verschachtelten zurück zur übergeordneten AggregationElasticsearch-Aggregation

Elasticsearch-Aggregation forum
Guest
 Sortieren einer umgekehrt verschachtelten zurück zur übergeordneten Aggregation

Post by Guest »

Ich aggregiere derzeit eine Sammlung anhand eines mehrstufigen verschachtelten Felds und berechne einige Unteraggregationsmetriken aus dieser Sammlung. Dies funktioniert mit der umgekehrt verschachtelten Funktion von Elasticsearch, wie unter Unteraggregieren einer verschachtelten zusammengesetzten Aggregation auf mehreren Ebenen beschrieben.< /p>
Mein aktueller Kampf besteht darin, eine Möglichkeit zu finden, die Aggregationen nach einer der berechneten Metriken zu sortieren. Wenn ich beispielsweise das folgende Dokument und meinen aktuellen Suchaufruf betrachte, möchte ich alle Aggregationen nach ihren Klicksummen sortieren.
Ich habe versucht, Bucket_sort innerhalb der inneren Aggs zu verwenden auf der Ebene back_to_parent, bekam aber die folgende Java-Ausnahme.

Code: Select all

class org.elasticsearch.search.aggregations.bucket.nested.InternalReverseNested cannot be cast to class org.elasticsearch.search.aggregations.InternalMultiBucketAggregation
(org.elasticsearch.search.aggregations.bucket.nested.InternalReverseNested and org.elasticsearch.search.aggregations.InternalMultiBucketAggregation are in unnamed module of loader 'app')

Code: Select all

{
id: '32ead132eq13w21',
statistics: {
clicks: 123,
views: 456
},
categories: [{ //nested type
name: 'color',
tags: [{ //nested type
slug: 'blue'
},{
slug: 'red'
}]
}]
}

Code: Select all

GET /acounts-123321/_search
{
size: 0,
aggs: {
categories_parent: {
nested: {
path: 'categories.tags'
},
aggs: {
filtered: {
filter: {
term: { 'categories.tags.category': 'color' }
},
aggs: {
by_slug: {
terms: {
field: 'categories.tags.slug',
size: perPage
},
aggs: {
back_to_parent: {
reverse_nested: {},
aggs: {
clicks: {
sum: {
field: 'statistics.clicks'
}
},
custom_metric: {
scripted_metric: {
init_script: 'state.accounts = []',
map_script: 'state.accounts.add(new HashMap(params["_source"]))',
combine_script: 'double result = 0;
for (acc in state.accounts) {
result += ( acc.statistics.clicks + acc.statistics.impressions);
}
return result;',
reduce_script: 'double sum = 0;
for (state in states) {
sum += state;
}
return sum;'
}
},
by_tag_sort: {
bucket_sort: {
sort: [{ 'clicks.value': { order: 'desc' } }]
}
}
}
}
}
}
}
}
}
Update:
Es wäre auch schön zu verstehen, wie es möglich wäre, die Buckets nach a zu sortieren benutzerdefinierte Metrik, berechnet durch eine unkomplizierte scripted_metric. Ich habe den obigen Suchaufruf aktualisiert und ein Beispiel für eine benutzerdefinierte_Metrik hinzugefügt, durch die ich das Sortieren zulassen möchte.
Ich sehe, dass die direkte Verwendung von „bucket_sort“ nicht mit funktioniert Standardsortierarray, das wir für konkrete Felder verwenden. Das Folgende scheint die Dinge also nicht zu klären. Es funktioniert auch nicht für ein Sortierskript, da [bucket_sort] nur feldbasierte Sortierung unterstützt.

Code: Select all

by_tag_sort: {
bucket_sort: {
sort: [{ 'custom_metric.value': { order: 'desc' } }]
}
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post