一、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 匹配所有查询,是没有查询条件下的默认语句

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
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 }

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄