电商网站商品管理(二)多种搜索方式
内容来自中华石杉在 B 站的 Elasticsearch 顶尖高手系列课程核心知识篇,其中部分代码从 Elasticsearch 5.2 升级到 7.10.1
这是第二节,继续前面一节的内容,让你对 Elasticsearch 的搜索功能有一个大概的印象。
1. query string search
搜索全部商品:
返回内容解析:
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 来附带的,如果做过 Web 开发,对于 query string 一定不陌生。
搜索商品名称中包含 yagao 的商品,而且按照售价降序排序:
适用于临时的在命令行使用一些工具,比如 curl,快速的发出请求,来检索想要的信息;但是如果查询请求很复杂,是很难去构建的,在生产环境中,几乎很少使用 query string search
执行过程中发现,一般第一次执行语句会慢一些,第二次以及后面的执行会快很多,因该是有缓存的缘故。
2. query DSL
DSL:Domain Specified Language,特定领域的语言
http request body:请求体,可以用 json 的格式来构建查询语法,比较方便,可以构建各种复杂的语法,比 query string search 肯定强大多了
查询所有的商品
查询名称包含 yagao 的商品,同时按照价格降序排序
分页查询商品,总共 3 条商品,假设每页就显示 1 条商品,现在显示第 2 页,所以就查出来第 2 个商品
注意这里是从 0 开始数的。
指定要查询出来商品的名称和价格就可以
更加适合生产环境的使用,可以构建复杂的查询
3. query filter
搜索商品名称包含 yagao,而且售价大于 40 元的商品
4. full-text search(全文检索)
尽量,无论是学什么技术,比如说你当初学 Java,学 Linux,学 shell,学 JavaScript,学 Hadoop……一定自己动手,特别是手工敲各种命令和代码,切记切记,减少复制粘贴的操作。只有自己动手手工敲,学习效果才最好。
producer 这个字段,会先被拆解,建立倒排索引
yagao producer ---> yagao 和 producer
5. phrase search(短语搜索)
跟全文检索相对应,相反,全文检索会将输入的搜索串拆解开来,去倒排索引里面去一一匹配,只要能匹配上任意一个拆解后的单词,就可以作为结果返回
phrase search,要求输入的搜索串,必须在指定的字段文本中,完全包含一模一样的,才可以算匹配,才能作为结果返回
6. highlight search(高亮搜索结果)
版权声明: 本文为 InfoQ 作者【escray】的原创文章。
原文链接:【http://xie.infoq.cn/article/b0db9dce86d338485c53dede0】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论