执行过滤
在前面的章节里, 我们忽略了一个称谓文档评分的属性(返回结果里的_score字段). score是一个数值, 表示文档与我们所指定的查询的匹配度. 分数越高, 文档匹配与越高, 反之亦然.
但是查询并不总需要产生分数, 特别是当他仅用于过滤文档集时. Elasticsearch会探测到这些情况, 并且自动优化查询以避免计算出过低的分数.
前面我们介绍的bool查询, 同样只是过滤子句, 来让我们使用查询来限制子句匹配的文档, 不改变如何计算分数, 举个例子, 让我们引入range查询, 他允许你通过值的范围过滤文档. 这个通常用于数字或日期过滤.
下面这个例子用bool查询返回balance在20000和30000之间的文档, 包括20000和30000. 换句话说, 我们想找出大于等于20000并且小于等于30000的文档:
GET /bank/_search
{
"query": {
"bool": {
"must": { "match_all": {} },
"filter": {
"range": {
"balance": {
"gte": 20000,
"lte": 30000
}
}
}
}
}
}
仔细看上面的例子, bool查询包含了一个match_all查询(查询部分)和一个range查询(过滤部分). 我们可以把其他任意查询替换成过滤部分. 在上面的例子中, range查询非常有意义, 因为文档都在范围类相同, 不存在一个文档比另一个更有意义.
除了match_all, match, bool和range查询之外, 还有很多查询类型, 我们现在不会去研究他们. 因为我们对他们如何运作有了基本的了解, 所以去掌握其他查询类型也会变得十分的简单.