开发者学堂课程【ElasticSearch 最新快速入门教程:并行过滤器】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/642/detail/10677
并行过滤器
内容介绍:
一、 为何使用过滤器。
二、 过滤器更快执行速度的两个主要原因。
三、 使用过滤器搜索返回 balances[20000,30000]。
一、 为何使用过滤器
文档中 score(_score 字段是搜索结果)。score 是一个数字型的,是一种相对方法匹配查询文档结果。分数越高,搜索关键字与该文档相关性越高;越低,搜索关键字与该文档相关性越低。
在 elasticsearch 中所有的搜索都会触发相关性分数计算。如果我们不使用相关性分数计算,那要使用另一种查询能力,构建过滤器。
二、过滤器更快执行速度的两个主要原因。
过滤器是类似于查询的概念,除了得以优化,更快的执行速度的两个主要原因:
1.过滤器不计算得分,所以他们比执行查询的速度
2.过滤器可缓存在内存中,允许重复搜索
三、使用过滤器搜索返回 balances[20000,30000]
为了便于理解过滤器,先介绍过滤器搜索
(like match_all,match,bool,etc.),可以与其他的普通查询搜索组合一个过滤器。
range filter,允许我们通过一个范围值来过滤文档,一般用于数字或日期过滤使用过滤器搜索返回balances[20000,30000]。换句话说,balance>=20000 && balance<=30000。
curl -XPOST 'localhost:9200/bank/_search?pretty'-d
‘{
“query”:{
“filtered”:{
"query”: {"match_all":{}},
"filter":{
"range":{
"balance":{
"gte":20000,
"Ite":30000
}
}
}
}
注意:
elasticsearch 旧版本 filtered 替换。从 es 的5.0版本开始,原先的 filtered 语句,类似 GET_search
{
"query":{
"filtered":{
"query":{
“match":{
"text": "quick brown fox"
}
},
filter":{
“term":{
"status":"published"
}
}
被淘汰,对应的替换语法是
GET _search
{
"query":{
"bool”:{
must”:{
match”:{
text”:”quick brown fox”
},
filter”:{
“term”:{
“status”:”published”
}
}
}
只是结构有了简单变化,其他不变。
所以上述的请求体应该写成:
{
query”:{
bool”:{
must”:{
match_all”:{}
},
filter”:{
range”:{
balance”:{
gte”:20000,
lte”:30000,
查询代码:
{
“query”:{
“bool”:{
“must”:{
“match_all”:{}
},
“filter”:{
“range”:{
“balance”:{
“gte”:20000,
“lte”:30000,
}
查询结果:
注意:
1. 过滤查询包含 match_all 查询(查询部分)和一系列过滤(过滤部分),可以代替任何其他查询到查询部分以及其他过滤器过滤部分,在上述情况下,过滤器范围智能,因为文案落入 range 所有匹配“平等”,即比另一个更相关,没有文档。
2.一般情况,最明智的方式决定是否使用 filter or query,就看相关性是否重要。如果相关性不重要,那就使用filter,否则就使用 query。
3.queries and filters 很类似于关系型数据库中的 “SELECT WHERE clause“