У меня есть запросasticsearch, который возвращает 10 лучших результатов для данной строки запроса.Теперь мне нужно использовать ответ для создания агрегации суммы для каждого из 10 лучших результатов.Это мой запрос на возврат 10 лучших:
GET search/
{
"index": "my_index",
"query": {
"match": {
"name": {
"query": "hello world",
"fuzziness": 2
}
}
}
}
. В ответ на вышеуказанный запрос я генерирую список из 10 org_id
s и перебираю каждый из этих идентификаторов.Я должен сделать еще один запрос, используя запрос ниже (где "org_id": "12345"
является первым элементом в моем массиве идентификаторов).
POST _search/my_index
{ "size": 0,
"query": {
"bool": {
"must": [
{
"match": {
"org_id": "12345"
}
}
]
}
},
"aggs": {
"aggregation_1": {
"sum": {
"field": "dollar_amount"
}
},
"aggregation_2": {
"sum": {
"field": "employees"
}
}
}
}
Однако я думаю, что этот подход неэффективен, потому что я должен сделатьВсего 11 запросов, которые не будут хорошо масштабироваться.В идеале я хотел бы сделать один запрос, который может сделать все это.
Есть ли какие-либо функциональные возможности в ES, которые сделали бы это возможным, или мне нужно было бы делать индивидуальные запросы для каждого параметра поиска?Я просмотрел документы и не могу найти ничего, что включало бы итерацию по массиву результатов.
РЕДАКТИРОВАТЬ: Для простоты, я думаю, что сейчас есть 2 запроса.Поэтому мне просто нужно выяснить, как пройти через массив org_ids
во 2-й запрос и выполнить все агрегации в этом 2-м запросе.
Например,
POST _search/my_index
{ "size": 0,
"query": {
"bool": {
"must": [
{
"match": {
"org_id": ["12345", "67891", "98765"]
}
}
]
}
},
"aggs": {
"aggregation_1": {
"sum": {
"field": "dollar_amount"
}
},
"aggregation_2": {
"sum": {
"field": "employees"
}
}
}
}