在上一节中,我们跳过了一个称为文档分数的小细节(搜索结果中的_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_all,match,bool和range查询之外,还有很多其他可用的查询类型,我们不会在这里讨论它们。由于我们已经基本了解它们的工作原理,因此将这些知识应用于学习和试验其他查询类型应该不会太困难。