文档查询之UrlSearch
Salted Fish 1991/6/26 基础
# 1. URI Search请求形式
# 在浏览器中输入: http://elasticsearch:9200/test_db/_search?q=name:张
curl -XGET "http://elasticsearch:9200/test_db/_search?q=name:张"
1
2
3
2
3
# 2. 返回格式和说明
{
//搜索请求耗费了多少毫秒
"took":0,
//搜索是否超时,请求时可自定义timeout参数,如:/_search?timeout=10ms
"timed_out":false,
// 分片信息
"_shards":{
// 在查询中参与分片的总数
"total":1,
// 成功的分片数量
"successful":1,
//跳过分片数量
"skipped":0,
//失败的分片数量
"failed":0
},
"hits":{
"total":{
//表示匹配到的文档总数
"value":1,
//描述value结果的准确性,当eq时准确,gte不准确
"relation":"eq"
},
//相关度的匹配分数,分数越高月相关
"max_score":1.0296195,
"hits":[
{
"_index":"test_db",//索引名称
"_type":"_doc",//文档类型
"_id":"pkCkRHgBl3R2rXlflr9j",//文档ID,唯一
//这条记录的匹配分数
"_score":1.0296195,
//结果集中的具体字段
"_source":{
"name":"张三封",
"age":19,
"home":"北京昌平"
}
}
]
}
}
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
32
33
34
35
36
37
38
39
40
41
42
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
32
33
34
35
36
37
38
39
40
41
42
# 3. URI Search 参数列表
| 参数 | 描述 |
|---|---|
| q | 在全文中搜索str,q=str或者q=字段:str |
| df | 指定在哪个字段查询,不指定时会对所有字段进行查询 |
| analyzer | 当分析查询字符串的时候使用的分词器. |
| sort | 根据字段名排序,?sort=x:desc(倒序),默认正序 |
| from | 返回的索引匹配结果的开始值,默认为 0 |
| size | 搜索结果返回的条数,默认为 10 |
| timeout | 设置查询超时时间,单位ms(毫秒)如:?timeout=1ms |
| _source_includes | 只返回索引中指定的列,多个列中间用逗号分开。 如:/_search?_source_includes=name,age |
| _source_excludes | 返回结果中不包含的字段多个列中间用逗号分开。 如:/_search?_source_excludes=name,age |
| _score | 是否返回字段信息,默认true:都返回 |
| explain | 在每个返回结果中,包含评分机制的解释,默认:false |
| terminate_after | 设置每个分片中查询的最大条数,如果设置结果中会有一个terminated_early |
| search_type | 搜索的类型,合适类型能提高搜索性能,类型有:dfs_query_then_fetch query_then_fetch,默认:query_then_fetch |
| default_operator | 多个条件的关系,AND 或者 OR,默认为 OR |
# 4. q
# 4.1 所有字段中搜索
# 对应浏览器输入
http://elasticsearch:9200/test_db/_search?q=张
1
2
2

# 4.2 指定字段中搜索
# 对应浏览器输入
http://elasticsearch:9200/test_db/_search?q=name:张
# 使用 http://elasticsearch:9200/test_db/_search?q=张&df=name一样可以实现一样的效果
1
2
3
4
2
3
4

# 4.3 多字段查询
# 查找名字中含有张、王的记录,(name like %张% or name like %王%)
http://elasticsearch:9200/test_db/_search?q=name:张 王
# 想查找name中有张、并且age=19的记录
http://elasticsearch:9200/test_db/_search?q=name:张 age:19&default_operator=AND
1
2
3
4
5
2
3
4
5
# 4.4 比较查询
# q=age:<=21 年龄小于等于21岁的
# q=age:>21 年龄大于21岁的
curl -XGET "http://elasticsearch:9200/test_db/_search?q=age:<=21"
1
2
3
2
3
# 4.5 范围查询
仅用数字类型,日期也是数字类型
表示符号
# [] : 表示闭区间
# {} : 表示开区间
1
2
2
使用示例
# 年
year:({2019 TO 2020]) 表示 2019 < year <= 2020。
year:([* TO 2020]) 表示 year <= 2020。
year:({2019 TO *}) 表示 year > 2019。
1
2
3
4
2
3
4
# 4.6 布尔查询
表示符号
# +(%2B): 必须包含,注意+ 用 %2B(url encode) 表示
# -:不能包含
1
2
2
使用示例
# 名字中必须包含张
http://elasticsearch:9200/test_db/_search?q=name:(%2B张)
# 名字中包含张,但不包含三的
http://elasticsearch:9200/test_db/_search?q=name:(%2B张 -三)
# 名字中,即不包含张,也不包含三的
http://elasticsearch:9200/test_db/_search?q=name:(-张 -三)
1
2
3
4
5
6
2
3
4
5
6
# 4.7 词组查询
进行词组查询时,被查找的词必须用“”引住,引住后会被当成一个单词查询
# 查找包含 NO ABC,并且顺序一致的记录
http://elasticsearch:9200/test_db/_search?q="NO ABC"
1
2
2
# 5. analyzer(分词器)
系统默认分词器有:
keyword、standard、simple等等,也支持第三方分词器,如IK。需要注意的是,在指定分词器参数的时候必须要使用
q进行字段查询。
# 5.1 使用分词器: keyword
第一步: 先分析分词器:keyword,会把字符串张三封分词成什么样,如下图:
第二步: 使用分词器查询

# 对应浏览器输入
http://elasticsearch:9200/test_db/_search?q=张三封&analyzer=keyword
1
2
2
# 5.2 使用分词器: standard
第一步: 先分析分词器:standard,会把字符串张三封分词成什么样,如下图:

第二步: 使用分词器查询

# 对应浏览器输入
http://elasticsearch:9200/test_db/_search?q=张三封&analyzer=standard&df=name
1
2
2
# 6. sort(排序)
# 按照年龄正序
http://elasticsearch:9200/test_db/_search?sort=age
# 按照年龄倒序
http://elasticsearch:9200/test_db/_search?sort=age:desc
1
2
3
4
2
3
4
# 7. from,size(分页)
# 从索引0开始取一条数据
http://elasticsearch:9200/test_db/_search?from=0&size=1
# 从索引1开始取两条数据
http://elasticsearch:9200/test_db/_search?from=0&size=2
1
2
3
4
2
3
4
# 8. 返回字段处理
_source_includes=a,b: 指定只返回a,b字段_source_excludes=a,b:指定不返回a,b字段_score=false:什么字段都不返回
# _score中只返回 name,age
http://elasticsearch:9200/test_db/_search?_source_includes=name,age
# _score中除了home字段不返回,其他字段都返回
http://elasticsearch:9200/test_db/_search?_source_excludes=home
# _score中什么字段都不返回
http://elasticsearch:9200/test_db/_search?_score=false
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 9. 评分机制

# 对应浏览器输入
http://elasticsearch:9200/test_db/_search?q=张&explain=true
1
2
2
# 10.设置分片返回数量

# 对应浏览器输入
http://elasticsearch:9200/test_db/_search?q=张&terminate_after=1
1
2
2