Допустим, у меня есть документы Elasticsearch, которые выглядят следующим образом
{
"_index": "sample.index",
"_type": "inventory",
"_id": "ebcc7f5c-1697-438f-911f-b8e9ff5554e9",
"_score": 1,
"_source": {
"name": "salt",
"properties": {
"vendors": ["vendor 1", "vendor 2"]
}
}
},
{
"_index": "sample.index",
"_type": "inventory",
"_id": "f5875c5c-9bf1-448b-99d9-47d873d4f016",
"_score": 1,
"_source": {
"name": "pepper",
"properties": {
"vendors": ["vendor 1"]
}
}
}
Что я хотел бы сделать, это получить количество элементов, которые могут быть получены от одного поставщика, двух поставщиков и т. Д.запрос, основанный на длине массива vendors.
Это тип вывода, который я пытаюсь получить, или что-то подобное.
{
"aggregations": {
"vendor_counts": {
"buckets": [
{
"vendor_array_length": "1",
"doc_count": 1
},
{
"vendor_array_length": "2",
"doc_count": 1
}
]
}
}
}
Заранее спасибо за любую помощь:)
РЕДАКТИРОВАТЬ: нижеприведенный ответ, кажется, работает для более новых версий ES, но мне приходится использовать более старую версию (я узнал об этом после первоначальной публикации этого вопроса).Следующий запрос работает для меня на ES 2.4.
{
"size": 0,
"aggs": {
"length": {
"terms": {
"script": "_source.vendors.size()"
}
}
}
}