|电商网站上的搜索功能是如何实现的?

文章图片

文章图片

文章图片

文章图片

文章图片
今天是刘小爱自学Java的第159天 。
感谢你的观看 , 谢谢你 。
学习计划安排如下:
- 索引库本质上和数据库类似 , 也是存储数据的 , 既然如此自然也会有增删改查 。
- 那么这个索引库到底有何特别应用呢?
- 索引库的特别之处在于它的查询 , 用户搜索一个词语 , 响应哪些对应的数据给用户?
- 重点是match匹配查询和词条查询 。
①通过POST请求添加数据 。
昨天我们给索引库设定了几个字段 , 以上述例子中的title字段为例 , 给其添加一条数据“小爱手机” , 这样后面可以通过索引库来快速定位这条数据了 。
通过响应结果可以看到result显示的是“created” , 也就是新建了一个数据 。
注意:这里的请求方式是POST , 昨天关于索引库的创建时POST对应的是修改 , PUT是新增 , 至于这儿为何是POST , 暂时不清楚 。
②随机生成id
系统会随机生成一个id来记录这条新增的数据 , 但是这个id太复杂了 , 不好记住 。
所以在新增数据时自定义id 。
2自定义id
在请求路径中指定id即可 。
关于请求路径:索引库是liuxiaoai01 , 索引类型goods , id为1 , 添加了一条数据 。
有了id之后我们就可以去进行修改和删除数据的操作了 , 如果不是系统随机的id不容易记住 , 使用起来不方便 。
3修改数据
PUT请求就是修改了 , 但是要注意使用PUT必须要指定id , 如果没有会报错 。
其中关于id的作用:
- 如果id在文档中不存在 , 则新增该数据 , 就相当于通过POST添加了一条数据 。
- 【|电商网站上的搜索功能是如何实现的?】如果id在文档中存在 , 则修改对应id数据 。
但也要知道使用POST新增数据这回事 。
3删除数据
根据id即可删除对应的数据 。
PS:观察响应结果result的值就能看出来进行了什么操作 。
- created对应新增数据 。
- update对应修改数据 。
- delete对应删除数据 。
同样的方式 , GET请求即对应的查询操作 , 根据id即可查询出对应的数据 。
但是这种方法基本不会用 。
要知道用户在搜索的时候 , 他怎么可能知道商品对应的id是多少?
所以用户查询的时候是使用不到id查询的 , 就需要全文检索技术了 ,
二、基本的搜索1匹配所有(match_all)
这里query代表的就是一个查询对象 , 里面编写具体的查询条件是怎样的:
- match_all即代表了匹配所有 , 也就对应了上图中的例子 。
- match即匹配查询 , 怎么匹配可以自行说明 。
- term即词条查询 , 查询的时候不考虑分词 。
- ……除此之外 , 还有很多种查询类型 。
现在主要讲解下match匹配查询和词条查询 。
2匹配查询(match)
为了方便测试 , 我向索引库中添加了两条数据 , 现在索引库中一共有4条数据:
“小爱手机” , “大爱手机” , “超爱手机”以及“小爱电视”这4条 。
match本身也就是匹配的意思 , 现在匹配和“小爱电视”相关的数据 。
运行会发现“手机”相关的数据都被搜索出来了 , 这是为什么呢?
因为“小爱电视”先会被分词成“小”“爱”以及“电视” , 和分词相关的数据都会被搜索出来 。
其中响应的结果有个score属性 , 也就是得分的意思:score越高表示结果越匹配 ,
在电商网站上搜索某品牌手机 , 会发现:
- 该品牌其它产品也会被搜索出来 。
- 手机壳啊什么的也会被搜索出来 。
and关系
operator翻译过来是运算 , 意思就是将分词结果通过and连接起来 。
查询条件是“小爱电视” , 但是其被分词为了“小” , “爱”和“电视” , 当然具体是不是这样分词我不太清楚 , 但思路是一样的:
- 如果不做说明默认or连接 , 那么查询到的数据的分词只要满足任意一个就可以 。
- 如果说明是and连接 , 那么查询到的数据分词必须要包含“小” , “爱”和“电视” 。
我们在通过词条匹配查询“小爱电视”会发现结果竟然一条数据都没有 。
老实说这个结果让我很是懵逼 , 想了好久才明白 , 还不确定对不对 , 我大致说下:
我们在创建索引库的时候 , title这个字段名类型是text , 它是会分词的 , 并且分词器是IK , 这个昨天就详细说明过 。
所以今天往索引库中添加数据“小爱电视” , 它会被分词成“小”、“爱”和“电视” 。
索引库中title这个字段是没有“小爱电视”这个词的 , 它被分词了 。
- 用match查询时本身也会将查询条件分词 , 所以会被查询到 。
- 而用term查询时不会将查询条件分词 , 所以查询不到 。
一个白天上班晚上学习的95后沪漂 , 不为其它 , 只为学会自律做好自己 , 也愿我的每日打卡能给你带来勇气 , 欢迎点赞关注和评论 。
推荐阅读
- 陈松伶让张萌吃大蒜配面包,婆婆随口一句话被全网骂!
- 晒晒高一儿子的营养早餐,简单食材用心做,网友纷纷求同款妈妈
- 杨振宁|网传物理学家杨振宁去世,系谣言!昨夜还与友人回信互动!
- 河南“网红早餐”,1碗4元,每天卖6大桶,外地人:不再想吃第2次
- 这种野菜路边很常见,摘回家蒸一蒸,变身网红美食,松软又清香
- 一家三口早餐,用了30分钟,营养十几种,网友:比我家午餐都丰盛
- 网上超火的芝士爆浆紫薯饼,做法就是这么简单! 太好吃了
- 种族主义|《纽约时报》煽动对中国的种族主义,美网友群起斥责
- 一家三口的晚餐,半小时搞定,晒朋友圈,网友:家的味道,真香
- 母子二人的精致早餐,发朋友圈炫耀,网友吐槽道道都想打包!
