执行过滤
source:https://www.elastic.co/guide/en/elasticsearch/reference/6.4/getting-started-filters.html
在前面的章节中 我们跳过了一个小细节:文档打分(查询结果中的_score字段),这个数值是用来衡量结果与你搜索条件的匹配程度,分数越高,文档关联程度越高,分数越低,关联程度越低。
但是查询并不总是需要分数,尤其是当我们只用过滤条件来对文档进行查询的时候,es为这些情况提供了优化查询去掉没有用的打分制。
我们之前介绍的布尔查询同样支持过滤条件,接下来介绍一下query的range查询操作,允许我们通过一个范围内的值对文档进行过滤操作。这个通常用在数值型或者日期型的过滤操作中。
下面的例子通过一个布尔查询返回所有balances在20000和30000质检的值,换句话说,我们希望找到一些大于等于20000和小于等于30000的数据。
curl -X GET "localhost:9200/bank/_search?pretty" -H 'Content-Type: application/json' -d'
{
"query": {
"bool": {
"must": { "match_all": {} },
"filter": {
"range": {
"balance": {
"gte": 20000,
"lte": 30000
}
}
}
}
}
}
'
分析下上面的内容。bool查询包含match_all的查询(查询部分)和range查询(过滤部分)
我们可以总结出任何其他形式的包含query和过滤部分的查询组合,在上面的示例中,
区间查询完美的让每个文档都公平的匹配,没有文档会比其他文档更加符合要求。
除了match_all,match,bool,和range查询,还有其他很多别的查询类型是可用的,我们先不研究了。
我们已经对他们的运行有了一个基本的理解,所以参考我们学到的去试验其他的查询方式应该不困难。