# DSL语言查询与过滤

# 1 什么是DSL语言

es中的查询请求有两种方式,一种是简易版的查询,另外一种是使用JSON完整的请求体,叫做结构化查询(DSL)。由于DSL查询更为直观也更为简易,所以大都使用这种方式。DSL查询是POST过去一个json,由于post的请求是json格式的,所以存在很多灵活性,也有很多形式

# 2 根据名称精确查询姓名

GET  /senta/user/_search
{
  "query": {
    "term": {
      "name": "wangwu"
    }
  }  
}
1
2
3
4
5
6
7
8

# 3 根据姓名模糊查询

GET /senta/user/_search
{
  "query": {
    "match": {
      "name":"张"
      }
    }
}
1
2
3
4
5
6
7
8

# 4 term与match区别

Term查询不会对字段进行分词查询,会采用精确匹配。
Match会根据该字段的分词器,进行分词查询。类似于mysql的LIKE查询 
1
2

# 5 分页查询

#类似于mysql的limit 0,5
GET /senta/user/_search
{
  "query": {
    "match": {
      "name":"张"
      }
    },
    "from": 0,
  	"size": 5
}
1
2
3
4
5
6
7
8
9
10
11

# 6 使用filter过滤年龄

# 相当于mysql 查询语句 select name,age from user where age>20 and age<=30 limit 0,10
# 具体关键字说明 match_all 查询所有 
# filter过滤条件
# from size 分页条件
# _source查询的字段
GET /senta/user/_search
{
	"query": {
		"bool": {
			"must": [{
			  "match_all": {}
			}],
			"filter": {
				"range": {
					"age": {
						"gt": 20,
						"lte": 30
					}
				}

			}

		}

	},
	"from": 0,
	"size": 10,
	"_source": ["name", "age"]

} 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31