我试图弄清楚为什么我们的新集群很慢并且发现了一些奇怪的东西。
执行此操作时:
{
"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
我认为它至少会更快)。
现在,这两个查询正在过滤不同的字段,但仍然是相同类型的字段,为什么它会在第一个查询中进行缓慢的“匹配”?有任何想法吗?我能以某种方式弄清楚吗?另外,它为什么要进行“匹配”?我只做过滤所以不应该做评分,对吧?