#elasticsearch
#elasticsearch
Вопрос:
Я ищу способ получить уникальные значения поля. в этом случае я хочу, чтобы он возвращал не уникальное значение из счетчика агрегации, а уникальные поля и значения.
т. е. JSON:
"name" : james,
"city" : "chicago"
},
{
"name" : james,
"city" : "san francisco"
},
{
"name" : james,
"city" : "chicago"
},
{
"name" : Mike,
"city" : "chicago"
},
{
"name" : Mike,
"city" : "texas"
},
{
"name" : Mike,
"city" : "texas"
},
{
"name" : Peter,
"city" : "chicago"
},
ВЫВОД:
"name" : james,
"city" : "chicago"
},
{
"name" : james,
"city" : "san francisco"
},
{
"name" : Mike,
"city" : "chicago"
},
{
"name" : Mike,
"city" : "texas"
},
{
"name" : Peter,
"city" : "chicago"
},
Ответ №1:
С этой целью вы можете использовать сценарии. Например, следующий запрос вернет вам точно все уникальные комбинации:
{
"size": 0,
"aggs": {
"unique": {
"terms": {
"script": {
"source": "[doc.name.value ?: 'no_name', doc.city.value ?: 'no_city'].join('-')"
}
}
}
}
}
Обратите внимание, что если это всего лишь одноразовый запрос для получения некоторой информации, это нормально, но если нет, то было бы лучше иметь другое поле, которое содержит оба значения и по которому можно выполнить обычную terms
агрегацию.