Медленное сопоставление запроса диапазона Elasticsearch в сочетании с указанным фильтром c - PullRequest
1 голос
/ 07 апреля 2020

Я пытаюсь выяснить, почему наш новый кластер работает медленно и обнаружил некоторые странные вещи.

При выполнении этого:

{
  "query": {
    "bool": {
      "filter": [
        { "term": { "reference_id": 4489 } },
        { "range": { "created_at": { "gte": "2020-03-15" }} }
      ]
    }
  }
}

И проверьте профилирование, похоже, это проводя много времени в «совпадении»:

IndexOrDocValuesQuery
created_at:[1584230400000 TO 9223372036854775807]
match, 2.3s, 84.2%

При выполнении следующего запроса, который фильтрует по другому полю (то же отображение), он вообще не использует match:

{
  "query": {
    "bool": {
      "filter": [
        { "term": { "root_id": 3413 } },
        { "range": { "created_at": { "gte": "2020-03-15" }} }
      ]
    }
  }
}

Теперь он просто проводит некоторое время в advance (соответствует 0):

IndexOrDocValuesQuery
created_at:[1584230400000 TO 9223372036854775807]
advance, 376.5ms, 82.5%

Оба root_id и reference_id отображаются как long (изменится на keyword как я думаю, это будет как минимум быстрее).

Теперь два запроса фильтруются по разным полям, но все равно одного и того же типа, почему в первом запросе выполняется "совпадение" в slooow ? Любые идеи? Могу ли я понять это как-нибудь? Кроме того, почему это делает "матч" вообще? Я делаю только фильтрацию, поэтому не нужно делать оценки, верно?

...