执行过滤

在上一节中,我们跳过了一个称为文档分数的小细节(搜索结果中的_score字段)。分数是一个数值,它是文档与我们指定的搜索查询匹配程度的相对度量。分数越高,文档相关性越高,反之则相关性越低。

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

我们在上一节中介绍的 bool查询 还支持过滤子句,这些子句允许我们在查询时限制与其他子句匹配的文档,而不会更改计算得分的方式。作为一个例子,让我们介绍 范围查询,它允许我们按一系列值过滤文档。这通常用于数字或日期过滤。

此示例使用bool查询返回所有余额介于20000和30000之间的帐户。换句话说,我们希望找到余额大于或等于20000且小于或等于30000的帐户。

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

解析上面的内容,bool查询包含match_all查询(查询部分)和范围查询(过滤器部分)。我们可以将任何其他查询替换其中的查询和过滤器部分。在上述情况下,范围查询非常有意义,因为落入该范围的文档都有相同的匹配度,即,没有文档比另一文档更相关。

除了match_allmatchboolrange查询之外,还有很多其他可用的查询类型,我们不会在这里讨论它们。由于我们已经基本了解它们的工作原理,因此将这些知识应用于学习和试验其他查询类型应该不会太困难。

results matching ""

    No results matching ""