Elasticsearch must 子句比过滤器快

Fai*_*lde 5 performance elasticsearch

我们使用elasticsearch 7.2,最近我们一直在观察一些奇怪的事情

我们尝试执行以下两个查询

{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "customer(keyword_field)": "big_customer"
          }
        }
      ]
    }
  }
}

{
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "customer(keyword_field)": "big_customer"
          }
        }
      ]
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

这匹配大约 100 万个文档。第一个比第二个快(快 10 倍!)。由于得分,我预计 1 会更慢

另外,当我添加排序时,它们都变慢了(第二个保持不变,第一个变得和第二个一样慢)

小智 0

我怀疑“过滤器”会查看所有文档,而“术语”(或日期范围,或匹配等)将查看索引值。,在新客户端上发现了类似的内容,并且很困惑为什么他们在顶层使用“过滤器”,而不是范围或匹配。

顺便说一句,这里可能是错误的......所以先在你的系统上尝试一下