|NO.Z.00024|——————————|BigDataEnd|——|Hadoop&ElasticSearch.V24|——|ELK.v24|集群|QueryDSL|Filter DSL|

一、Filter DSL
### --- Filter DSL

~~~     Elasticsearch中的所有的查询都会触发相关度得分的计算。
~~~     对于那些不需要相关度得分的场景下,Elasticsearch以过滤器的形式提供了另一种查询功能,
~~~     过滤器在概念上类似于查询,但是它们有非常快的执行速度,
~~~     # 执行速度快主要有以下两个原因:

~~~     过滤器不会计算相关度的得分,所以它们在计算上更快一些。
~~~     过滤器可以被缓存到内存中,这使得在重复的搜索查询上,其要比相应的查询快出许多。
~~~     为了理解过滤器,可以将一个查询(像是match_all,match,bool等)和一个过滤器结合起来。
~~~     我们以范围过滤器为例,它允许我们通过一个区间的值来过滤文档。
~~~     这通常被用在数字和日期的过滤上。 
~~~     下面这个例子使用一个被过滤的查询,其返回price值是在200到1000之间(闭区间)的书。
### --- 示例

POST /book/_search
{
"query": {
"bool": {
"must": {
"match_all": {}
},
"filter": {
"range": {
"price": {
"gte": 200,
"lte": 1000
}
}
}
}
}
}
~~~     分解上面的例子,被过滤的查询包含一个match_all查询(查询部分)和一个过滤器(filter部分)。
~~~     可以在查询部分中放入其他查询,在filter部分放入其它过滤器。
~~~     在上面的应用场景中,由于所有的在这个范围之内的文档都是平等的(或者说相关度都是一样的),
~~~     没有一个文档比另一个文档更相关,所以这个时候使用范围过滤器就非常合适了。
~~~     通常情况下,要决定是使用过滤器还是使用查询,你就需要问自己是否需要相关度得分。
~~~     如果相关度是不重要的,使用过滤器,否则使用查询。
~~~     查询和过滤器在概念上类似于SELECT WHERE语句。

 
 
 
 
 
 
 
 

Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
                                                                                                                                                   ——W.S.Landor

 

 

posted on 2022-04-15 14:16  yanqi_vip  阅读(24)  评论(0)    收藏  举报

导航