Filtered query VS. filter

filter的使用方法

ES中filter的用法有两种,一种是filted query,如下:

{
  "query":{
    "filtered":{
      "query":{
        "term":{"title":"kitchen3"}
      },
      "filter":{
        "term":{"price":1000}
      }
    }
  }
}

这种方式已经deprecated了,可以通过boolQuery实现。

{
  "query": {
    "bool": {
      "must": {
        "term": {
          "term":{"title":"kitchen3"}
        }
      },
      "filter": {
        "term": {
          "price":1000
        }
      }
    }
  }
}

另一种是直接放在根目录:

{
  "query":{
    "term":{"title":"kitchen3"}
  },
  "filter":{
    "term":{"price":1000}
  }
}

the order of keys in query JSON do not influence results.

区别

  • 根目录中的filterquery后执行。在filter query先执行filter,不计算score,再执行query
  • 如果还要在搜索结果中执行aggregation操作,filter query聚合的是filterquery之后的结果,而filter聚合的是query的结果。

参考文献

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容