Как значительно минимизировать время выполнения запроса elasticsearch для запроса, который имеет агрегирование с помощью скрипта
У меня около 17 миллионов документов (постепенно увеличивается) в индексе эластичного поиска. Отображение одной из меток свойств , используемых для агрегирования,
{
"mappings":{
"labels":{
"properties":{
"label":{
"type":"text",
"fields":{
"raw":{
"type":"keyword"
}
}
},
"count":{
"type":"float"
}
}
}
}
}
Каждый документ содержит более 500 элементов в этом атрибуте label.
Теперь при агрегировании документа запросом
{
"query": {
"bool": {
"must": [
{
"match_phrase": {
"type": "XYZ"
}
}
]
}
},
"aggs": {
"date": {
"range": {
"field": "date",
"ranges": [
{
"from": 1577816100000,
"to": 1609438500000
},
{
"from": 1546280100000,
"to": 1577816100000
}
]
},
"aggs": {
"field1": {
"terms": {
"field": "field1",
"size": 100
},
"aggs": {
"agg_label": {
"terms": {
"field": "labels.label.raw",
"size": 250,
"min_doc_count": 5
},
"aggs": {
"sum1": {
"sum": {
"script": "_score"
}
},
"sum2": {
"sum": {
"field": "labels.count"
}
}
}
}
}
}
}
}
}
}
Это занимает около 20 секунд, и чем выше количество значений в метках этого поля, тем больше время выполнения.
Я знаю, что запрос сценария стоит дорого. Можно ли как-нибудь значительно сократить время выполнения?