# 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
2
3
4
5
6
7
8
# 3 根据姓名模糊查询
GET /senta/user/_search
{
"query": {
"match": {
"name":"张"
}
}
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 4 term与match区别
Term查询不会对字段进行分词查询,会采用精确匹配。
Match会根据该字段的分词器,进行分词查询。类似于mysql的LIKE查询
1
2
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
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
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