Требуется выполнить агрегацию суммы по нескольким индексам с одинаковым именем поля
Теперь с несколькими индексами вы будетенеобходимо проверить, существует ли это конкретное поле в этих индексах или нет И если поле имеет тот же тип данных .
Индексы
I 'Мы создали три индекса, имеющих одно поле с именем num
.
index_1
- num: long
index_2
- num: long
index_3
- num: text
: fielddata: true
Также обратите внимание, что если поле имеет тип text
, то я установил его свойство fielddata:true
.Но если вы не установите его, то приведенный ниже запрос выдаст вам результат агрегации, а также ошибку, сообщающую, что вы не можете извлечь значение типа text
в качестве анализируемой строки, и вы можете использовать doc
только для полей, которыеnon_analyzed
.
Пример запроса:
POST /_search
{
"size":0,
"query":{
"bool":{
"filter":[
{
"exists":{
"field":"num"
}
}
]
}
},
"aggs":{
"myaggs":{
"sum":{
"script":{
"source":"if(doc['num'].value instanceof long) return doc['num'].value;"
}
}
}
}
}
Запрос, если вы не можете установить fielddata:true
В этом случае вам необходимо явно указать индексы, для которых вы хотитеагрегат.
POST /_search
{
"size":0,
"query":{
"bool":{
"filter":[
{
"exists":{
"field":"num"
}
},
{
"terms":{
"_index":[
"index_1",
"index_2"
]
}
}
]
}
},
"aggs":{
"myaggs":{
"sum":{
"script":{
"source":"if(doc['num'].value instanceof long) return doc['num'].value;"
}
}
}
}
}
Надеюсь, это поможет!