1

私たちの新しいクラスターがなぜ遅いのかを理解しようとしていて、奇妙なことが見つかりました。

これを実行すると:

{
  "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

ここで、2 つのクエリは異なるフィールドでフィルタリングしていますが、同じタイプのフィールドであることに変わりはありません。なぜ最初のクエリで「一致」が遅いのでしょうか? 何か案は?なんとなくわかるかな。また、なぜ「一致」しているのでしょうか。フィルタリングのみを行うので、スコアリングを行う必要はありませんよね?

4

0 に答える 0