2014-09-30 2 views
5

Czy można wykluczyć dokumenty z zapytania dotyczącego agregacji? Po prostu muszę znać "licznik" i "sumę" i nie potrzebuję trafień. Zrobiłem to tak:Jak zwrócić tylko statystyki agregacji w zapytaniu ElasticSearch?

{ 
    "query": { 
    "match_all": { 

    } 
    }, 
    "aggs": { 
    "my_agg": { 
     "stats": { 
     "field": "country_id" 
     } 
    } 
    } 
} 
+0

Możliwe duplikat [Wykonaj agregację Elasticsearch bez zwracania tablicy trafień] (http://stackoverflow.com/questions/27467835/perform-elasticsearch-aggregation-without-returning-hits-array) –

Odpowiedz

11

Dodaj do Twojego zapytania ?search_type=count. Na przykład:

GET /my_index/countries/_search?search_type=count 
{ 
"query": { 
    "match_all": { 

    } 
    }, 
    "aggs": { 
    "my_agg": { 
     "stats": { 
     "field": "country_id" 
     } 
    } 
    } 
} 
+2

"Przestarzały w wersji 2.0.0-beta1: liczba nie ma znaczenia nie zapewnia żadnych korzyści w stosunku do query_then_fetch o rozmiarze 0. " [link] (https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-search-type.html#count) – yurez

7

skupić się tylko na agregację z zapytaniem match_all, można po prostu użyć „wielkość”: 0 (ten określa chcesz żadnych wyników zapytania), bez zapytania:

curl -XPOST "http://localhost:9200/indexname/doctype/_search" -d' 
{ 
    "size": 0, 
    "aggs": { 
     "my_agg": { 
      "stats": { 
       "field": "country_id" 
      } 
     } 
    } 
}' 
+0

Właściwie odpowiedź Andrieja Stefana jest lepsza (źródło: http://www.elastic.co/guide/en/elasticsearch/reference/1.x/search-aggregations.html#_returning_only_aggregation_results). Jednak nie ma potrzeby dodawania zapytania match_all. –