Skip to content

Latest commit

 

History

History
39 lines (33 loc) · 1.78 KB

executing_filters.md

File metadata and controls

39 lines (33 loc) · 1.78 KB

执行过滤器

在之前的章节中,我们跳过了关于文档得分的细节(搜索结果中的_score字段)。score是一个数值,它 衡量了我们的查询和所匹配的文档的相关度,得分越高,说明文档的相关度越高,反之,文档的相关度越低。

但是查询并不总是需要产生评分,特别是针对 "筛选" 文档而言,Elasticsearch 会判断这些情况,自动 的去优化查询,避免计算无用的分数。

我们之前介绍的bool query也支持过滤器(filter),过滤器可以限制文档匹配其它的查询字句,而且 不改变评分的的计算。作为例子,让我们来介绍一下range query,它可以过滤在某个范围值内的文档, 通常被用在数字或者日期过滤器中。

下面这个例子返回所有账户余额在 20000 到 30000 之间的文档,换句话说,我们希望找到所余额大于等于 20000 并且小于等于 30000 的账户。

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": {
    "bool": {
      "must": { "match_all": {} },
      "filter": {
        "range": {
          "balance": {
            "gte": 20000,
            "lte": 30000
          }
        }
      }
    }
  }
}'

如上所示,这个bool查询包括了一个match_all的查询器和range过滤器,我们也可以添加其它的 查询到查询和过滤器中。range查询的意义在于所有的符合匹配条件的文档都是"平等的",不存在某个文档 比另一个文档的相关性更高。

除了match_allmatchboolrange 查询外,还有很多其它的查询类型,但我们不会在在这 里深入的介绍。由于我们已经对查询有了一个基本的了解,相信接下来学习其它的查询类型将会更加容易。