私たちの新しいクラスターがなぜ遅いのかを理解しようとしていて、奇妙なことが見つかりました。
これを実行すると:
{
"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 つのクエリは異なるフィールドでフィルタリングしていますが、同じタイプのフィールドであることに変わりはありません。なぜ最初のクエリで「一致」が遅いのでしょうか? 何か案は?なんとなくわかるかな。また、なぜ「一致」しているのでしょうか。フィルタリングのみを行うので、スコアリングを行う必要はありませんよね?