简单搜索入门
1、query string search
2、query DSL
3、query filter
4、full-text search
5、phrase search
6、highlight search
*****************************************************************************************
1、query string search
搜索全部商品:GET /index/type/_search
例如: GET /ecommerce/product/_search
took:耗费了几毫秒
timed_out:是否超时
_shards:数据拆成了5个分片,所以对于搜索请求,会打到所有的primary shard(或者是它的某个replica shard也可以)
hits.total:查询结果的数量,1个document
hits.max_score:score的含义就是document对于一个search的相关度匹配分数,越相关,就越匹配,分数也越高
"took": 2,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 1,
"hits": [
{
"_index": "ecommerce",
"_type": "product",
"_id": "2",
"_score": 1,
"_source": {
"name": "jiajieshi yagao",
"desc": "youxiao fangzhu",
"price": 25,
"producer": "jiajieshi producer",
"tags": [
"fangzhu"
]
}
}]
}
}
query string search的由来,因为search参数都是以HTTP请求的query string来附带的
搜索商品名称中包含yagao的商品,而且按照价格降序排序:
GET /ecommerce/product/_search?q=name:yaogao&sort=price:desc
适用于临时的查询,比如curl,快速的发出请求,来检索想要的信息,但是复杂的请求很难构建。在生产环境中很少使用query string search
2、query DSL
DSL:Domain Specified language,特定领域的语言
http request body:请求体可以用json的格式来构建查询语法,比较方便,可以构建各种复杂的语法
查询所有的商品
GET /ecommerce/product/_search
{
"query" : {"match_all" : {} }
}
查询名称包含牙膏的商品,同时按照价格降序排序
GET /ecommerce/product/_search
{
"query" : {
"match" : {
"name" : "yagao"
}
},
"sort" : [
{"price" : "desc"}
]
}
分页查询商品,总共有3条商品,假设每页就显示1条商品,现在显示第2页,所以就查询出来第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" : "yagao"
}
},
"filter" : {
"range" : {
"price" : { "gt" : 25 }
}
}
}
}
}
4、full-text search (全文检索)
GET /ecommerce/product/_search
{
"query" : {
"match" : {
"producer" : "yagao producer"
}
}
}
producer这个字段会先被拆解,建立倒排索引
yagao producer ---> yagao和producer
5、phrase search (短语搜索)
跟全文检索相反,全文检索会将输入的搜索串拆解,去倒排索引里面一一匹配,只要能匹配上任意一个拆解后的单词,就可以作为结果返回;phrase seach要求输入的搜索串,必须在指定的字段文本中完全包含,才可以匹配,并作为结果返回
GET /ecommerce/product/_search
{
"query" : {
"match_phrase" : {
"producer" : "yaogao producer"
}
}
}
6、highlight search (高亮搜索结果)
GET /ecommerce/product/_search
{
"query" : {
"match" : {
"producer" : "producer"
}
},
"highlight" : {
"fields" : {
"producer" : {}
}
}
}