elasticsearch 使用Elasticsearch筛选查询的正确方法?(筛选与筛选查询),elasticsearch,elasticsearch" /> elasticsearch 使用Elasticsearch筛选查询的正确方法?(筛选与筛选查询),elasticsearch,elasticsearch" />

elasticsearch 使用Elasticsearch筛选查询的正确方法?(筛选与筛选查询)

elasticsearch 使用Elasticsearch筛选查询的正确方法?(筛选与筛选查询),elasticsearch,elasticsearch,我正在尝试找出Elasticsearch中的“过滤器”和“过滤查询”之间是否有区别 下面的两个示例请求在针对我的索引运行时返回相同的结果 他们在某些微妙的方面真的不同吗 在不同的情况下,有没有一个原因会让一个比另一个更受欢迎 DSL提供一个顶级查询,和一个顶级过滤器: GET /index/type/_search?_source { "query": { "multi_match": { "query": "my dog has fleas", "field

我正在尝试找出Elasticsearch中的“过滤器”和“过滤查询”之间是否有区别

下面的两个示例请求在针对我的索引运行时返回相同的结果

他们在某些微妙的方面真的不同吗

在不同的情况下,有没有一个原因会让一个比另一个更受欢迎

DSL提供一个顶级
查询
和一个顶级
过滤器

GET /index/type/_search?_source
{
  "query": {
    "multi_match": {
      "query": "my dog has fleas",
      "fields": ["name", "keywords"]
    }
  },
  "filter": {
    "term": {"status": 2}
  }
}
DSL仅提供顶级
查询,使用
过滤的
构造:

GET /index/type/_search?_source
{
  "query": {
    "filtered": {
      "query": {
        "multi_match": {
          "query": "my dog has fleas",
          "fields": ["name", "keywords"]
        }
      },
      "filter": {
        "term": {"status": 2}
      }
    }
  }
}
第一个示例是a,从性能角度来看,它是次优的。过滤查询是首选,因为过滤器将在查询之前运行。通常,您希望首先运行过滤器,因为评分文档比布尔通过/失败更昂贵。这样,在对结果集运行查询之前,它会被缩减。使用post_筛选器,首先运行查询,对整个结果集进行评分,然后将筛选器应用于结果

顶级
filter
指令在1.0中被弃用,并被重命名为
post\u filter
,以阐明其用途和用法

搜索中的顶级筛选器参数已重命名为post_filter,以指示它不应用作筛选搜索结果的主要方式(改为使用筛选查询),而仅用于在计算面/聚合后筛选结果


谢谢,克里斯,这很有帮助。