在前边的部分,我们跳过了一个叫做document score(搜索结果中的_score字段)。分数(score)是一个数值,它是文档与我们指定的搜索查询匹配程度的相对度量值。分数越高,文档越相关,得分越低,文档的相关性越小。

但查询并不总是需要产生分数,特别是当它们只用于“过滤”文档集时。Elasticsearch检测这些情况并自动优化查询执行为了不计算无用的分数。

我们在上一节中介绍的布尔查询也支持筛选字句,允许在不适用分数计算的情况下,使用查询限制被其他字句匹配的文档。作为一个例子,让我们引入范围查询,这使我们能过根据值得范围来过滤文档。通常用于过滤数字或者日期。

这个例子使用布尔查询返回所有balances介于20000和30000之间的accounts。换句话讲,我们想要找出所有balance大于等于20000并且小于等于30000的accounts记录。

GET /bank/_search
{
  "query": {
    "bool": {
      "filter": {
        "range": {
          "balance": {
            "gte": 20000,
            "lte": 30000
          }
        }
      },
      "must": {
        "match_all": {}
      }
    }
  }
}

 

分析以上,布尔查询包含一个match_all查询(查询部分)和一个范围查询(过滤部分)。我们可以用任何其他查询替换查询(query)和过滤(filter)部分。在上述情况下,范围查询是完全由道理的,因为所有的文档都在范围内,没有哪个文档比其他更相关(结果内的文档的相关度是等同的)。

除了match_all, match, bool以及range查询,还有其他的可用的查询类型,我们在此不再详解。因为我们已经对于他们的工作原理有了基础的了解,那么将这些知识应用于其他类型的查询并非难事。

 

 

本文系本人根据官方文档的翻译,能力有限、水平一般,如果对想学习Elasticsearch的朋友有帮助,将是本人的莫大荣幸。
原文出处:https://www.elastic.co/guide/en/elasticsearch/reference/current/_executing_filters.html

 

 posted on 2017-05-02 17:33  段子手6哥  阅读(392)  评论(0编辑  收藏  举报