Case your mapping
PUT /index
{
"mappings": {
"doc": {
"properties": {
"querySearched": {
"type": "text",
"fielddata": true
}
}
}
}
}
Ваш запрос должен выглядеть следующим образом:
GET index/_search
{
"size": 0,
"aggs": {
"result": {
"terms": {
"field": "querySearched",
"size": 10
}
}
}
}
Вы должны добавить fielddata:true
, чтобы включить агрегирование для поля типа text type больше этого
"size": 10, => limit to 10
После короткого разговора с @Kamal я чувствую себя обязанным сообщить вам, что если вы решите включить fielddata:true
, вы должны знать, что он может потреблять многопространства кучи.
По ссылке, которой я поделился:
Fielddata может занимать много места в куче, особенно при загрузке текстовых полей с большим количеством элементов. После того, как полевые данные были загружены в кучу, они остаются там на время жизни сегмента. Кроме того, загрузка полевых данных является дорогостоящим процессом, из-за которого пользователи могут столкнуться с задержками. Вот почему полевые данные по умолчанию отключены.
Другая альтернатива (более эффективная):
PUT /index
{
"mappings": {
"doc": {
"properties": {
"querySearched": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
}
Тогда ваш запрос агрегирования
GET index/_search
{
"size": 0,
"aggs": {
"result": {
"terms": {
"field": "querySearched.keyword",
"size": 10
}
}
}
}
Обарешения работают, но вы должны принять к рассмотрению .
Надеюсь, это поможет