Elasticsearch 顶尖高手(5)--快速入门案例实战:多种搜索方式(二)

1.query string search

      GET /ecommerce/product/_search

image

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

image

适用于临时的在命令行使用一些工具,比如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

}

image

指定要查询出来商品的名称和价格

GET /ecommerce/product/_search

{

     “query”:{“match_all”:{}},

     “_source”:[“name”,”price”]

}

image

3.query filter(对数据进行过滤)

搜索商品名称包含yagao,而且售价大于25元的商品

GET /ecommerce/product/_search

{

     “query”:{

             “bool”:{

                    “must”:[

                           {“match”:{“name”:”yagao”}}

                     ]

             },

             “filter”:{

                    “range”:{

                             “price”:{

                                    “gt”:25

                              }

                      }

              }

     }

}

image

4.full-test search(全文检索)

GET /ecommerce/product/_search

{

      “query”:{

             “match”:{

                   “product”:”yagao producer”

             }

       }

}

image 


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”}

      }

}

image

只返回了一条数据,因为要求全匹配

6.heighlight search(高亮搜索)

GET /ecommerce/product/_search

{

       “query”:{

              “match”:{

                         “product”:”producter”

             }

       },

      “highlight”:{

             “fields”:{

                    “product”:{}

              }

       }

}

image

猜你喜欢

转载自www.cnblogs.com/Mr-WangYue/p/11518715.html