Как значительно минимизировать время выполнения запроса 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 секунд, и чем выше количество значений в метках этого поля, тем больше время выполнения.

Я знаю, что запрос сценария стоит дорого. Можно ли как-нибудь значительно сократить время выполнения?

0 ответов