执行过滤

在上一节中,我们跳过了称为文档得分(_score领域在搜索结果中)的一个小细节。比分是一个数值,说的是文件与我们指定搜索查询的相匹配度。得分越高,文档的相关程度越高,得分越低,文档的相关联程度越低。

但查询不总是需要产生分数,尤其是当它们仅用于“过滤”文件集时。Elasticsearch检测这些情况,并自动地以不计算无用分数优化查询执行。

bool查询,我们在上一节中还介绍了支持不改变分数如何计算出来的允许使用查询来限制会被其他条款要匹配的文档的filter 子句。让我们用一个例子来介绍一下范围查询,这使得我们可以通过一个范围值来筛选文档。这通常用于数字或日期进行过滤。

此示例使用布尔查询返回所有在20000和30000之间的帐户。换句话说,我们希望找到一个平衡点是大于或等于20000,且小于或等于30000的所有帐户。


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

解剖上文中,布尔查询包含match_all 查询(查询部分)和一个range 查询(过滤器部分)。我们可以将查询和过滤器替换为任何其他的查询。在上述情况下,范围查询是非常合情合理的,因为落入范围内的所有文档都匹配“equally”,即没有文档比另一种关联度更高。

除了match_all,match,bool和range 查询,有很多可用的其他查询类型的,在这里我们不会深入讲解他们。既然我们已经对他们是如何工作的有了一个基本的了解,学习和其他查询类型的实验运用这些知识应该不会太困难。

results matching ""

    No results matching ""