1、query string search
2、query DSL
3、query filter
4、full-text search
5、phrase search
6、highlight search
第一种:string查询(不适用于生产环境)
1、query string search
格式: GET /index/type/_search
示例:
GET /ecommerce/product/_search
补充说明:
{
"took": 6,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 3,
"max_score": 1,
"hits": [
{"json数据。。"}
took:耗费了几毫秒
timed_out:是否超时,这里是没有
_shards:数据拆成了5个分片,所以对于搜索请求,会打到所有的primary shard(或者是它的某个replica shard也可以)
hits.total:查询结果的数量,3个document
hits.max_score:score的含义,就是document对于一个search的相关度的匹配分数,越相关,就越匹配,分数也高
hits.hits:包含了匹配搜索的document的详细数据
query string search的由来,因为search参数都是以http请求的query string来附带的,
也可以通过添加条件的形式对查询做过滤和排序,例如:
GET /ecommerce/product/_search?q=name:chabei&sort=price:desc
第二种:DSL查询
DSL:Domain Specified Language,特定领域的语言
格式:
GET /index/type/_search
{
"json格式请求体"
}
示例:
--查询所有的数据
GET /ecommerce/product/_search
{
"query": {"match_all": {}}
}
--条件查询并排序
GET /ecommerce/product/_search
{
"query": {"match": {
"name": "chabei"
}}
, "sort": [
{
"price": {
"order": "asc"
}
}
]
}
--分页查询(这里是每页只显示一条,从第0页开始)
GET /ecommerce/product/_search
{
"query": {"match_all": {}}
, "from": 0
, "size": 1
}
--查询指定字段
GET /ecommerce/product/_search
{
"query": {"match_all": {}}
, "_source": ["price"]
}
第三种:query filter查询
示例:
GET /ecommerce/product/_search
{
"query": {
"bool": {
"must": [
{"match": {
"name": "chabei" --匹配字段
}}
]
, "filter": {
"range": { --按照范围过滤
"price": { --按照价格过滤
"gte": 0, --大于0
"lte": 100 --小于100
}
}
}
}}
}
第四种:full-text search(全文检索)
示例:
GET /ecommerce/product/_search
{
"query": {
"match": {
"desc": "bu jiankang"
}
}
}
全文检索的查询方式match和match-all是不一样的,
match会对数据做倒排索引,根据match中的查询条件去匹配
第五种:phrase search(短语搜索)
跟全文检索相对应,相反,全文检索会将输入的搜索串拆解开来,去倒排索引里面去一一匹配,只要能匹配上任意一个拆解后的单词,就可以作为结果返回
phrase search,要求输入的搜索串,必须在指定的字段文本中,完全包含一模一样的,才可以算匹配,才能作为结果返回
代码示例:
GET /ecommerce/product/_search
{
"query": {
"match_phrase": {
"desc": "bu jiankang"
}
}
}
第六种:highlight search(高亮搜索结果)
示例:
GET /ecommerce/product/_search
{
"query": {
"match": {
"name": "taifugao"
}
}
, "highlight": {
"fields": {
"name": {}
}
}
}