Elasticsearch DSL中Query与Filter的区别
2016-03-07 23:13
561 查看
Elasticsearch支持很多查询方式,除了通过9300(默认)端口通过TCP协议进行查询,另一种就是DSL,它是把请求写在JSON里面,然后进行相关查询。
一个DSL例子
GET _search
{
"query": {
"bool": {
"must": [
{ "match": { "name": "Jim" }},
{ "match": { "city": "Guangzhou" }}
],
"filter": [
{ "term": { "weight": "60" }},
{ "range": { "age": { "gte": "18" }}}
]
}
}
}
查询的种类
Elasticsearch中的DSL主要由两部分组成:
Leaf query Cluase 叶查询子句:
这种查询可以单独使用,针对某一特定的字段查询特定的值,比如match、term、range等
Compound query Cluase复合查询子句:
这种查询配合其他的叶查询或者复合查询,用于在逻辑上,组成更为复杂的查询,比如bool
Query与Filter
查询在Query查询上下文和Filter过滤器上下文中,执行的操作是不一样的:
1、查询上下文:是在使用query进行查询时的执行环境,比如使用search的时候。
在查询上下文中,查询会回答这个问题——“这个文档是否匹配这个查询,它的相关度高么?”
ES中索引的数据都会存储一个_score分值,分值越高就代表越匹配。即使lucene使用倒排索引,对于某个搜索的分值计算还是需要一定的时间消耗。
2、过滤器上下文:在使用filter参数时候的执行环境,比如在bool查询中使用Must_not或者filter
在过滤器上下文中,查询会回答这个问题——“这个文档是否匹配?”
它不会去计算任何分值,也不会关心返回的排序问题,因此效率会高一点。
另外,经常使用过滤器,ES会自动的缓存过滤器的内容,这对于查询来说,会提高很多性能。
总而言之:
1 查询上下文:查询操作不仅仅会进行查询,还会计算分值,用于确定相关度;
2 过滤器上下文:查询操作仅判断是否满足查询条件,不会计算得分,查询的结果可以被缓存。
所以,根据实际的需求,选择不同的查询子句。
一个DSL例子
GET _search
{
"query": {
"bool": {
"must": [
{ "match": { "name": "Jim" }},
{ "match": { "city": "Guangzhou" }}
],
"filter": [
{ "term": { "weight": "60" }},
{ "range": { "age": { "gte": "18" }}}
]
}
}
}
查询的种类
Elasticsearch中的DSL主要由两部分组成:
Leaf query Cluase 叶查询子句:
这种查询可以单独使用,针对某一特定的字段查询特定的值,比如match、term、range等
Compound query Cluase复合查询子句:
这种查询配合其他的叶查询或者复合查询,用于在逻辑上,组成更为复杂的查询,比如bool
Query与Filter
查询在Query查询上下文和Filter过滤器上下文中,执行的操作是不一样的:
1、查询上下文:是在使用query进行查询时的执行环境,比如使用search的时候。
在查询上下文中,查询会回答这个问题——“这个文档是否匹配这个查询,它的相关度高么?”
ES中索引的数据都会存储一个_score分值,分值越高就代表越匹配。即使lucene使用倒排索引,对于某个搜索的分值计算还是需要一定的时间消耗。
2、过滤器上下文:在使用filter参数时候的执行环境,比如在bool查询中使用Must_not或者filter
在过滤器上下文中,查询会回答这个问题——“这个文档是否匹配?”
它不会去计算任何分值,也不会关心返回的排序问题,因此效率会高一点。
另外,经常使用过滤器,ES会自动的缓存过滤器的内容,这对于查询来说,会提高很多性能。
总而言之:
1 查询上下文:查询操作不仅仅会进行查询,还会计算分值,用于确定相关度;
2 过滤器上下文:查询操作仅判断是否满足查询条件,不会计算得分,查询的结果可以被缓存。
所以,根据实际的需求,选择不同的查询子句。
相关文章推荐
- Android UI 模板
- java中StringBuilder、StringBuffer、String类之间的关系 - 音
- iOS绘图-UIBezierPath的使用
- 将一个字典内的内value转换为集合:返回一个数组,此数组中包含输入字典的键值对中的数组的所有元素(为NSArray添加category)
- iOS深入学习(UITableView系列4:使用xib自定义cell)
- 95. Unique Binary Search Trees II LeetCode
- UI笔记
- 4. PathVariable、RequestParam、 CookieValue、SessionAttributes、ResponseBody、RequestHeader注解类
- NGUI图文混排
- 1007. Maximum Subsequence Sum (25)
- UIScrollView常见属性
- UI基本视图控制
- 用UI简单的控件搭载一个简单的登录页面
- UIView 的基本方法
- java中Integer.parseInt(String)与Integer.valueOf(String)区别
- Ui——创建视图的方法及过程
- iOS 基于MVC设计模式练习UITableView使用 —— 4000 HERO博客
- hdu4027Can you answer these queries?【线段树区间更新区间求和】
- Java HashMap And PriorityQueue Use
- UESTC--1253--阿里巴巴和n个大盗 (博弈)