2016-09-01 3 views
0

In meiner Abfrage aggregiere ich die Buckets in einem Skalar. Da ich mich nicht für jeden Eimer interessiere (was in meinem Fall mehrere zehn Millionen sind), möchte ich sie aus dem zurückgegebenen Ergebnis entfernen; ich möchte etwas wie "Größe" tun: 0, um alle Treffer zu verbergen. Ist es möglich?Wie können Sie Buckets im ElasticSearch-Ergebnis ausblenden?

Z. B .:

{ 
    "size": 0, 
    "aggs": { 
    "pop": { 
     "terms": { 
     "field": "account_number", 
     "size": 0 
     }, 
     "aggs": { 
      "average": { 
       "avg": { 
        "field": "price" 
       } 
      } 
     } 
    }, 
    "sum_of_avg": { 
     "sum_bucket": { 
     "buckets_path": "pop>average" 
     } 
    } 
    } 
} 

Ergebnis:

[...] 
"aggregations": { 
    "pop": { 
     "doc_count_error_upper_bound": 40851, 
     "sum_other_doc_count": 93441329, 
     "buckets": [...] <== i don't want this 
    }, 
    "sum_of_avg": { 
     "value": 128.0768325884469 
    } 
+0

Dies ist zu dieser Frage verwandt: [link] (http://stackoverflow.com/questions/38081739/how-to-perform-a-pipeline-aggregation-without-returning-all-buckets-in- elasticse) – bcl

Antwort

-1

Ich denke, was Sie wollen, dass die "Kardinalität" Aggregation ist. Das wird Ihnen die Anzahl der verschiedenen Werte zurückgeben.

https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-cardinality-aggregation.html

Beispiel:

GET devdev/alert/_search 
{ 
    "size": 0, 
    "aggs": { 
    "agg1": { 
     "cardinality": { 
     "field": "price" 
     } 
    } 
    } 
} 
+0

Nicht wirklich, für jeden Bucket möchte ich eine Aggregatfunktion anwenden und dann alle Ergebnisse zusammenfassen, genau wie in meinem Beispiel. :) – bcl

0

Ich habe gerade gebucht ein answer in der damit verbundenen Frage.

In diesem Fall wird die Anforderung sollte wie folgt aussehen:

curl -XPOST 'http://localhost:9200/<index>/_search?filter_path=aggregations.sum_of_avg' -d ' 
{ 
    "size": 0, 
    "aggs": { 
    "pop": { 
     "terms": { 
     "field": "account_number", 
     "size": 0 
     }, 
     "aggs": { 
      "average": { 
       "avg": { 
        "field": "price" 
       } 
      } 
     } 
    }, 
    "sum_of_avg": { 
     "sum_bucket": { 
     "buckets_path": "pop>average" 
     } 
    } 
    } 
} 

PS: wenn Sie eine andere Lösung gefunden, bitte hier teilen. Vielen Dank!

Verwandte Themen