Search API
指定查询的索引
1. 我们需要在URL中带上_search来表示这次操作是个查询操作
语法 | 范围 |
---|---|
/_search | 集群上所有的索引 |
/index1/_search | index1 |
/index1,index2/_search | index1和index2 |
/index*/_search | 以index开头的索引 |
URI Search
# 以GET请求在URL中使用查询参数
# 使用“q”,指定查询字符串 query string syntax 是kv键值对
# 使用df可以指定查询字段,不知道默认从所有字段查询
# sort 排序 也可以指定字段排序,如year:desc ,以年份降序
# form和size用于分页
# profile可以查看查询是如何被执行的
例子:响应内容太多,就不展示了,可以自己执行下面的查询来看响应
# 指定查询 查询movies索引中year字段
GET /movies/_search?q=year:1995
# 范查询 查询movies索引中所有字段
GET /movies/_search?q=1995
# Term查询 查询year中包含1995或者2021的文档
GET /movies/_search?q=year:(1995 2021)
# Term查询不加括号,表示查询year字段值含有1995,或者所有字段值包含2021的(2021是范查询)
GET /movies/_search?q=year:1995 2021
# Phrase查询 查询year中含有1995且含有2021的文档
GET /movice/_search?q=year:"1995 2021"
# 范围查询 区间表示:[]闭区间 {}开区间
GET /movice/_search?q=year:[1995 TO 2021]
GET /movice/_search?q=year:{1995 TO 2021}
# 算数符号
GET /movice/_search?q=year:>1995
GET /movice/_search?q=year:(>1995 && <=2021)
# 通配符查询
GET /movice/_search?q=year:19?5 # ?表示一个字符
GET /movice/_search?q=year:19*5 # ?表示0或者多个字符
# 模糊匹配
GET /movice/_search?q=title:hvae~1 #会匹配到have
# 近似查询
GET /movice/_search?q=title:Lord Rings~2 #会检索出Lord和Rings中间隔两个单词的文档
Request Body Search
# 1. 使用Elasticsearch提供的,基于JSON格式的更加完备的Query Domain Specific Language(DSL)
# 2. 一些高阶的查询只能通过Request Body来做,所以建议使用这种方式
例子:
# 分页 from从0开始,默认返回10个结果,且获取靠后的翻页成本较高
POST /movies/_search
{
"from":10,
"size":20,
"query":{
"match_all":{}
}
}
# 排序,最好在数字和日期类型字段上排序
POST /movies/_search
{
"sort":[{"order_date":"desc"}],
"from":10,
"size":20,
"query":{
"match_all":{}
}
}
# 只返回部分字段,当字段较多时,可以选择只返回部分字段
POST /movies/_search
{
"_source":["order_date","date"],
"from":10,
"size":20,
"query":{
"match_all":{}
}
}
注意:_scoure支持通配符
_source["name*","desc*"]
批量查询 msearch
POST test/_msearch
{}
{"query":{"match_all":{}},"size":2}
{"index":"test2"} # 指定另外的索引查询
{"query":{"match_all":{}},"size":1}
响应结果如下:
{
"took" : 61,
"responses" : [
{
"took" : 44,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "test",
"_type" : "_doc",
"_id" : "1",
"_score" : 1.0,
"_source" : {
"field1" : "value2"
}
}
]
},
"status" : 200
},
{
"took" : 45,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "test2",
"_type" : "_doc",
"_id" : "3",
"_score" : 1.0,
"_source" : {
"field1" : "value3"
}
}
]
},
"status" : 200
}
]
}
更多内容欢迎关注我的个人公众号“韩哥有话说”,100G人工智能学习资料,大量后端学习资料等你来拿。