2016-01-11 2 views
0

Я пытаюсь получить агрегирование типов документов в нашем хранилище дат. Глядя на 1.7 Type Filter documentation, он прост, используя фильтр типов. Тем не менее, я бегу в следующий вопрос пытается представить этот запрос:Elasticsearch 1.7 Тип агрегата документа

curl -XGET localhost:9200/my_index/_search?pretty -d ' 
{ "type": 
    { "value" : "my_type" } 
}' 

Результаты в:

"error" : "SearchPhaseExecutionException[Failed to execute phase [query], all shards failed;... 

У меня есть успех, выполнив следующее:

curl -XGET localhost:9200/my_index/_search?pretty -d ' 
{ 
    "aggs": { 
    "type_a_total": { 
     "filter": { 
     "type": { 
      "value": "type_a" 
     } 
     } 
    } 
    } 
}' 

curl -XGET localhost:9200/my_index/_search?pretty -d ' 
{ 
    "aggs": { 
    "type_b_total": { 
     "filter": { 
     "type": { 
      "value": "type_b" 
     } 
     } 
    } 
    } 
}' 

Результаты в:

... 
"aggregations" : { 
    "type_a" : { 
    "doc_count" : 123456789 
    } 
} 
... 
"aggregations" : { 
    "type_b" : { 
    "doc_count" : 987654321 
    } 
} 
... 

Любая идея как я могу вернуть их все в одном агрегате на основе _type?

ответ

3

Вам нужно обернуть type фильтр внутри query элемента, либо с помощью constant_score запроса или filtered запроса (мой выбор).

curl -XGET localhost:9200/my_index/_search?pretty -d '{ 
    "query": { 
    "filtered": { 
     "filter": { 
     "type": { 
      "value": "my_type" 
     } 
     } 
    } 
    } 
}' 

Однако, если вы просто хотите, чтобы получить количество документов каждого типа, вы можете просто использовать terms агрегацию на _type поле

curl -XGET localhost:9200/my_index/_search?pretty -d '{ 
    "size": 0, 
    "aggs": { 
    "all_types": { 
     "terms": { 
     "field": "_type" 
     } 
    } 
    } 
}' 
+0

Второй запрос именно то, что я искал ! FWIW, первый запрос возвратил ошибку. Спасибо! – Jesse

+0

Какая ошибка? – Val

+0

Я стою исправлено. Кажется, он возвращается, как ожидалось. – Jesse