Агрегаты эластичного поиска (фасет с подгранком)
Я использую эластичный поиск для создания фасета. Это хорошо работает для подсчета, но я пытаюсь более сложную задачу. Проблема в том, что я не знаю название задачи, которую я хочу сделать....
Мой фактический запрос аспекта:
"facets": {
"name": {"terms": {"field": "name", "size": 20}}
}
ответ:
"name": {
"_type": "terms",
"missing": 0,
"total": 11,
"other": 0,
"terms": [
{ "term": "liliales", "count": 4 },
{ "term": "commelinales", "count": 3 },
{ "term": "dioscoreales", "count": 2 },
{ "term": "arecales", "count": 1 },
{ "term": "poales", "count": 1 }
] } }
это пример моих данных:
name | rank
_________________________________
liliales | accepted
liliales | accepted
liliales | misapplied
liliales | synonym
commelinales | accepted
commelinales | misapplied
commelinales | synonym
dioscoreales | misapplied
dioscoreales | synonym
arecales | accepted
poalesa | synonym
Я хочу иметь для каждого термина подмассив с количеством "ранг", как это:
"name" : {
"_type" : "terms",
"missing" : 0,
"total" : 11,
"other" : 0,
"terms" : [{
"term" : "liliales",
"count" : 4,
"rank" : {
"accepted" : 2,
"misapplied" : 1,
"synonym" : 1
}
}, {
"term" : "commelinales",
"count" : 3,
"rank" : {
"accepted" : 1,
"misapplied" : 1,
"synonym" : 1
}
}, {
"term" : "dioscoreales",
"count" : 2,
"rank" : {
"misapplied" : 1,
"synonym" : 1
}
}, {
"term" : "arecales",
"count" : 1,
"rank" : {
"accepted" : 1
}
}, {
"term" : "poales",
"count" : 1,
"rank" : {
"synonym" : 1
}
}
]
}
Как называется этот вид аспекта и как я могу это сделать, пожалуйста?
заранее спасибо
1 ответ
Решение
Я думаю, что вы ищете агрегаты.
Агрегации созданы для составления многоуровневых агрегаций.
Таким образом, вы можете иметь первый уровень для name
а затем еще один уровень в rank
,
Что-то вроде:
GET _search
{
"aggs": {
"by_name": {
"terms": {
"field": "name"
},
"aggs": {
"by_rank": {
"terms": {
"field": "rank"
}
}
}
}
}
}