ES之DSL查询
一、ES介绍
ES因搜索而生,主要工作就是处理查询,返回结果
二、查询语句
1 { 2 "size": 0, 3 "query": { 4 "bool": { 5 "must": [{ 6 "match": { 7 "dip": "192.168.1.1" 8 } 9 }], 10 "filter": [{ 11 "range": { 12 "occur_time": { 13 "gte": 1553443200000, 14 "lte": 1553529599000 15 } 16 } 17 }] 18 } 19 }, 20 "aggs": { 21 "count": { 22 "sum": { 23 "field": "count" 24 } 25 } 26 } 27 }
三、说明
1.match_all 匹配所有查询,是没有查询条件下的默认语句
1 { 2 "query": { 3 "match_all": {} 4 } 5 }
此查询常用于合并过滤条件。比如说你需要检索所有的邮箱,所有的文档相关性都是相同的,所以得到的_score为1。
2.match 匹配分词
1 { 2 "query": { 3 "match": { 4 "ip_category": 1 5 } 6 } 7 }
match查询只能就指定某个确切字段某个确切的值进行搜索,因此一定要指定正确的字段名以避免语法错误。
3.multi_match 多值匹配
1 { 2 "query": { 3 "multi_match": { 4 "query": "1", 5 "fields": [ 6 "title", 7 "content" 8 ] 9 } 10 } 11 }
查询文章标题和内容包含1的数据
4.term 精确匹配,不分词,精确匹配数字、日期、布尔值等未经切词的文本数据类型
1 { 2 "query": { 3 "term": { 4 "ip": "192.168.1.1" 5 } 6 } 7 }
5.terms 多值匹配,如果某个字段指定了多个值,那么文档需要一起去做匹配
1 { 2 "query": { 3 "terms": { 4 "title": [ 5 "java", 6 "python" 7 ] 8 } 9 } 10 }
6.range 范围查询,gt-大于,gte-大于等于,It-小于,Ite-小于等于
1 { 2 "query": { 3 "range": { 4 "age": { 5 "gte": 1, 6 "Ite": 6 7 } 8 } 9 } 10 }
7.exists和missing 查找文档中是否包含指定字段或没有某个字段,类似于SQL语句中的is_null/not is_null
1 { 2 "exists": { 3 "field": "title" 4 } 5 }
这两个过滤只是针对已经查出来一批数据来,但是想区分出某个字段是否存在的时候使用
8.bool 过滤,合并多个过滤条件查询结果的布尔逻辑,它包含的操作符:
- must:多个查询条件的完全匹配,相当于and
- must_not:多个查询条件的相反匹配,相当于not
- should:至少有一个查询条件匹配,相当于or
这些参数可以分别继承一个过滤条件或者一个过滤条件的数组
1 { 2 "bool": { 3 "must": {"term": {"folder": "inbox"}}, 4 "must_not": {"term": {"tag": "spam"}}, 5 "should": [ 6 {"term": {"starred": true}}, 7 {"term": {"unread": true}} 8 ] 9 } 10 }
- filter:返回的文档必须满足filter子句的条件,但是不会像must一样,参与计算分值
在filter子句查询中,分值将会都返回0,分值会受特定的查询影响。
比如,下面三个查询中都是返回所有status字段为active的文档
第一个查询,所有的文档都会返回0:
1 { 2 "query": { 3 "bool": { 4 "filter": { 5 "term": { 6 "status": "active" 7 } 8 } 9 } 10 } 11 }
第二个查询,bool查询中包含了一个match_all,因此所有得文档都会返回1
1 { 2 "query": { 3 "bool": { 4 "must": { 5 "match_all": {} 6 }, 7 "filter": { 8 "term": { 9 "status": "active" 10 } 11 } 12 } 13 } 14 }
第三个查询,constant_score与上面的查询结果相同,也会给每个文档返回1:
1 { 2 "query": { 3 "constant_score": { 4 "filter": { 5 "term": { 6 "status": "active" 7 } 8 } 9 } 10 } 11 }