多种搜索方式
一,query string search 搜索全部商品:GET /ecommerce/product/_search 搜索商品名称中包含牙膏的商品,而且按售价降序排序:GET /ecommerce/product/_search?q=name:yagao&sort=price:desc 适用于临时的在命令行使用一些工具,比如curl,快速的发出请求,来检索想要的信息,但是如果查询请求很复杂,是很难去构建的 在生产环境中,几乎很少使用 query string search took:耗费了几毫秒 time_out:是否超时 _shards:由于把数据拆成了5个分片,所以对于搜索请求,会打到所有的primary shard(或者是它的某个replica shard也可以) hits.total:查询结果的数量,几个document hits.max_score:score就是document对于一个search的相关度的匹配分数,越相关,就越匹配,分数也高 hits.hits:包含了匹配搜索的document的详细数据 二,query DSL
DSL(Domain Specifies Langguage)特定领域的语言 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"} ] } 分页查询商品,总共三条商品,假设每页就显示一条商品,现在显示第二页,所以就查出来 第二个商品 GET /ecommerce/product/_search { "query":{"match_all":{}}, "from":1, "size":2 } 指定要查询出来商品的名称和价格就可以 GET /ecommerce/product/_search { "query":{"match_all":{}}, "_source":["name","price"] } 更加适合生产环境的使用,可以构建复杂的查询
三,query filter 搜索商品名称包含yagao,而且售价大于25元的商品 GET /ecommerce/product/_search { "query":{ "bool":{ "must":{ "match":{ "name":"yagao" } }, "filter":{ "range":{ "price":{"gt":25} } } } } } 四,full-text search (全文检索) GET /ecommerce/product/_search { "query":{ "match":{ "producer":"yagao producer" } } } 尽量,不论是学什么技术,一定要自己手动敲,切记cv,只有自己手动敲,学习效果才最好。 producer这个字段,会先被拆解,简历倒排索引 special 4 yagao 4 producer 1 2 3 4 gaolujie 1 zhonghua 3 jiajieshi 2 当 yagao producer---->yagao和producer 五,phrase search(短语搜索) 跟全文检索相反,全文检索会将输入的搜索穿拆解开来,去倒排索引里面去一一匹配,只要能匹配上任意一个拆解后的单词,就额可以作为结果返回 phrase search:要求输入的搜索串,必须在指定的字段文本中,完全包含一模一样的,才可以算是匹配,才能作为结果返回。 GET /ecommerce/product/_search { "query":{ "match_phrase":{ "producer":"yagao producer" } } } 六,highlight search (高亮搜索) GET /ecommerce/product/_search { "query":{ "match_phrase":{ "producer":"yagao producer" } }, "highlight":{ "fields":{ "producer":{} } } }