1. query string search
搜索全部商品:GET /ecommerce/product/_search
搜索商品名称中包含yagao的商品,而且按照售价降序排序:
GET /ecommerce/product/_search?q=name:yagao&sort=price:desc
适用于临时的在命令行使用一些工具,比如curl,快速的发出请求,来检索想要的信息;但是如果查询请求很复杂,是很难去构建
在生产环境,几乎很少使用query string search
took:耗费了几毫秒
time_out:是否超时
_shard:数据拆成了几个分片,对于搜索的请求,会打到所有的primary shard(或者其他的replica shard)
hits.total:查询结果的数量,一共几个document
hits.max_score:score的含义,就是document对于一个search的相关度匹配分数,越相关就越匹配
hits.hits:包含了匹配搜索的document的详细数据
2. query DSL
查询所有的商品
GET /ecommerce/product/_search
{
"query":{
"match_all":{
}
}
}
查询名称包含yagao的商品,然后按照加个降序
GET /ecommerce/product/_search
{
"query":{
"match":{
"name":"yagao"
}
},
"sort":[
{
"price":"desc"
}
]
}
分页查询商品,总共3条商品,假设每页就显示1条商品,现在显示第2页,所以就查出来第二个商品
GET /ecommerce/product/_search
{
"query":{
"match_all:{},
"from":1,
"size":1
}
}
指定要查询出来商品的名称和价格就可以
GET /ecommerce/product/_search
{
"query":{
"match_all":{},
"_source":["name","price"]
}
}
更加适合生产环境的使用,可以构建复杂的查询
3. query filter
搜索商品名称包含yagao,而且售价大于25元的商品
GET /ecommerce/product/_search
{
"query":{
"bool":{
"must":{
"match":{
"name":"yaogao"
}
},
"filter":{
"range":{
"price":{
"gt":25
}
}
}
}
}
}
4. full-text search(全文检索)
GET /ecommerce/product/_search
{
"query":{
"match":{
"producer":"yagao producer"
}
}
}
5. phrase search(短语搜索)
跟全文搜索相对应,相反,全文检索会将输入的搜索串拆解开来,去倒排索引里面去一一匹配,只要能匹配上任意一个拆解后的单词,就可以作为结果返回来,
phrase search,要求输入的搜索串,必须在指定的字段文本中,完全包含一模一样的,才可以算匹配,才能作为结果返回
GET /ecommerce/product/_search
{
"query":{
"match_phrase":{
"producer":"yaogao producer"
}
}
}
6. highlight search(高亮搜索)
GET /ecommerce/product/_search
{
"query":{
"match":{
"producer":"producer"
}
},
"highlight":{
"fields":{
"producer":{}
}
}
}