1.query string search
GET /ecommerce/product/_search
took:耗费了几毫秒
timeout:是否超时
_shards:数据拆成了5个分片,所以对于搜索请求,会打到所有的primary shard(或者是它的某个relica shard也可以)
hist.total:查询结果的数量,4个total
max_score:score的含义,就是document对于一个search的相关度的匹配分数,越相关,就越匹配,分数也越高
hits.hits:包含了匹配搜索的document的详细数据
搜索商品名称中包含yagao的商品,而且按照售价降序排序:GET /ecommerce/product/_search?q=name:yagao&sort=price:desc
适用于临时的在命令行使用一些工具,比如curl,快读的发出请求,来检索想要的信息。但是如果查询请求很复杂,是很难去构建的,在生产环境中,几乎很少使用query string search
2.query DSL
DSL: Domain Specified Language 特定领域的语言
http request body :请求体,可以用json的格式来构建查询语法,比较方便,可以构建各种复杂的语法,比query string search 更加强大
查询所有商品
GET /ecommerce/product/_search
{
“query”:{“match_all”:{}}
}
查询名称包含yagao 的商品,同时按照价格降序排序
GET /ecommerce/product/_search
{
“query”:{
“match”:{
“name”:”yagao”
}
},
“sort”:[
{“price”:”desc”}
]
}
分页查询商品,总共3条商品,假设每页就显示1条商品, 现在显示第二页,所以就查出第二个商品
GET /ecommerce/product/_search
{
“query”:{“match_all”:{}},
“from”:1,
“size”:2
}
指定要查询出来商品的名称和价格
GET /ecommerce/product/_search
{
“query”:{“match_all”:{}},
“_source”:[“name”,”price”]
}
3.query filter(对数据进行过滤)
搜索商品名称包含yagao,而且售价大于25元的商品
GET /ecommerce/product/_search
{
“query”:{
“bool”:{
“must”:[
{“match”:{“name”:”yagao”}}
]
},
“filter”:{
“range”:{
“price”:{
“gt”:25
}
}
}
}
}
4.full-test search(全文检索)
GET /ecommerce/product/_search
{
“query”:{
“match”:{
“product”:”yagao producer”
}
}
}
producer 会被拆解开,建立倒排索引
special 5
yagao 5
producer 1,2,3,5
gaolujie 1
zhonghua 3
jiajieshi 2
最终会找到匹配的最多的那一条数据,也就是所谓的匹配度最高
5.phrase search(全文搜索)
跟全文搜索相对应,相反,全文检索会将输入的搜索串拆解开来,去倒排索引里面去一一匹配,只要能匹配上任意一个拆解后的单词,就可以作为结果返回
phrase search,要求输入的搜索串,必须在指定的字段文本中, 完全包含一摸一样的,才可以算匹配,才能作为结果返回。
GET /ecommerce/product/_search
{
“query”:{
“match_phrase”:{“product”:”yagao producter”}
}
}
只返回了一条数据,因为要求全匹配
6.heighlight search(高亮搜索)
GET /ecommerce/product/_search
{
“query”:{
“match”:{
“product”:”producter”
}
},
“highlight”:{
“fields”:{
“product”:{}
}
}
}
原文地址:https://www.cnblogs.com/Mr-WangYue/p/11518715.html