在之前的章节中,我们跳过了关于文档得分的细节(搜索结果中的_score
字段)。score
是一个数值,它
衡量了我们的查询和所匹配的文档的相关度,得分越高,说明文档的相关度越高,反之,文档的相关度越低。
但是查询并不总是需要产生评分,特别是针对 "筛选" 文档而言,Elasticsearch 会判断这些情况,自动 的去优化查询,避免计算无用的分数。
我们之前介绍的bool query
也支持过滤器(filter),过滤器可以限制文档匹配其它的查询字句,而且
不改变评分的的计算。作为例子,让我们来介绍一下range query
,它可以过滤在某个范围值内的文档,
通常被用在数字或者日期过滤器中。
下面这个例子返回所有账户余额在 20000 到 30000 之间的文档,换句话说,我们希望找到所余额大于等于 20000 并且小于等于 30000 的账户。
curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
"query": {
"bool": {
"must": { "match_all": {} },
"filter": {
"range": {
"balance": {
"gte": 20000,
"lte": 30000
}
}
}
}
}
}'
如上所示,这个bool
查询包括了一个match_all
的查询器和range
过滤器,我们也可以添加其它的
查询到查询和过滤器中。range
查询的意义在于所有的符合匹配条件的文档都是"平等的",不存在某个文档
比另一个文档的相关性更高。
除了match_all
,match
,bool
和range
查询外,还有很多其它的查询类型,但我们不会在在这
里深入的介绍。由于我们已经对查询有了一个基本的了解,相信接下来学习其它的查询类型将会更加容易。