Elasticsearch-过滤器

在前边的章节中,我们跳过了一个document score的小细节(_score 字段在查询结果中),分数是一个数值,是文档与我们指定的查询的匹配程度的相对度量。数值越高,文档的相关性越强。

但是查询并不总是需要产生分数,特别是当它们只是被用来过滤文档集时,Elasticsearch会发现这些场景并自动优化查询的执行来避免计算无用的分数。

之前章节中介绍的bool query 同样支持filter从句,它可以使用query来限制文档被其他从句匹配,无论它被计算出的得分有多少,为了示范一个例子,让我们介绍下range query,它允许通过范围值来过滤文档,它通常被用做数值或数据过滤。


这个例子使用了bool query来返回所有金额在20000-30000间的账户

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
GET /bank/_search
{
"query": {
"bool": {
"must": { "match_all": {} },
"filter": {
"range": {
"balance": {
"gte": 20000,
"lte": 30000
}
}
}
}
}
}

这个bool query包含一个match_all query(查询部分)和一个rangequery(过滤部分)。我们可以使用任何其他的查询指令替代查询和filter部分,在上例中,当我们检索的数据落在一个范围内时,range query是更好地选择,因为只要在这个范围内的数据没有任何一个是好于其他数据的。

除了match_all,match,boolrange查询,还有很多其他的查询类型,我们这里没有提到他们,因为我们对它们的工作方式有了基本的理解,其他查询类型的学习和操作都不会很难。

文章链接 https://fangzongzhou.github.io/2018/09/29/计算机/技术文档/Elasticsearch/过滤器/