- query String search
- query SDL
- query filter
- full-text search
- phrase search
- highlight search
一、query String search
搜索全部type下的document:GET /index/type/_search
搜索出以下参数:
took:耗费了几毫秒
time_out:是否超时
_shards:数据拆成5个分片,所以对所有的请求,会打到所有的primary shard或者replica shard上
hits.total:查询结果的数量
hit.max_score:score就是一个document对于一个search的相关度的匹配分数,越相关就越匹配,分数也就越高
hit.hits:包含了匹配出来的document的详细数据
query String search的由来:因为search参数都是以HTTP请求的query string来附带的
还可以按照具体的field来查询并排序:GET /index/type/_search?q=name:zhangsan&sort=age:desc
适用于临时的在命令行使用一些工具,比如curl,快速的发出请求检索信息,但是如果查询请求很复杂的话,很难去构建这种语句在生产环境中,所以很少用query string search
二、query DSL
DSL:domain specified language,特定领域的语言
HTTP request body:请求体可以用json格式来构建查询语法,可以构建各种复杂的查询语句,比query string search强大的多
1、查询所有
GET /index/type/_search {
“query”:{“match_all”:{}}
}
2、按照某一field查询,并按某一个field排序
GET /index/type/_search {
“query”:{
match:{
“name”:“张三”
}
},
“sort”:[
{“age”:“desc”}
]
}
3、分页查询,from:从哪一个开始查,size:查几个
GET /index/type/_search {
“query”:{“match_all”:{}},
“from”:1,
“size”:1
}
4、查询指定的field
GET /index/type/_search {
“query”:{“match_all”:{}},
“_source”:[“name”,“age”]
}
三、query filter
搜索包含某一个field,并且按照某一个field进行过滤
GET /index/type/_search {
“query”:{
“bool”:{
“must”:{
“match”:{
“name”:“张三”
}
},
“filter”:{
“range”:{
“age”:{“gt”:25}
}
}
}
}
}
四、full-text search(全文索引)
GET /index/type/_search {
“query”:{
“match”:{
“description”:“I am a doctor”
}
}
会先对“I am a doctor”进行拆分处理,“I”,“am”,“a”,“doctor”
5、phrase search(短语搜索)
跟全文索引正好相反,全文索引会将输入的搜索字符串拆分,去倒排索引里面进行一一匹配,只要能匹配上任意一个拆解的单词,就可以作为返回结果,但是phrase search要求输入的搜索串,必须和要搜索的document里面的字段文本一模一样才算匹配成功,作为返回结果。
GET /index/type/_search {
“query”:{
“match_phrase”:{
“description”:“I am a doctor”
}
}
}
6、highLight search(高亮搜索结果)
GET /index/type/_search {
“match”:{
“name”:“zhangsan”
}
“highlight”:{
“fileds”:{
“name”:{}
}
}
}