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的结果。

参考文献

  • Elasticsearch Filtered query vs Filter

你可能感兴趣的:(Filtered query VS. filter)