今天是刘小爱自学Java的第159天。

感谢你的观看,谢谢你。

学习计划安排如下:

  • 索引库本质上和数据库类似,也是存储数据的,既然如此自然也会有增删改查。
  • 那么这个索引库到底有何特别应用呢?
  • 索引库的特别之处在于它的查询,用户搜索一个词语,响应哪些对应的数据给用户?
  • 重点是match匹配查询和词条查询。

一、索引库的增删改查

1新增数据

①通过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数据。

也通过PUT请求既能完成新增操作又能完成修改操作,一般都会直接使用PUT。

但也要知道使用POST新增数据这回事。

3删除数据

根据id即可删除对应的数据。

PS:观察响应结果result的值就能看出来进行了什么操作。

  • created对应新增数据。
  • update对应修改数据。
  • delete对应删除数据。

4查询数据

同样的方式,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连接,那么查询到的数据分词必须要包含“小”,“爱”和“电视”。

3词条匹配(term)

我们在通过词条匹配查询“小爱电视”会发现结果竟然一条数据都没有。

老实说这个结果让我很是懵逼,想了好久才明白,还不确定对不对,我大致说下:

我们在创建索引库的时候,title这个字段名类型是text,它是会分词的,并且分词器是IK,这个昨天就详细说明过。

所以今天往索引库中添加数据“小爱电视”,它会被分词成“小”、“爱”和“电视”。

索引库中title这个字段是没有“小爱电视”这个词的,它被分词了。

  • 用match查询时本身也会将查询条件分词,所以会被查询到。
  • 而用term查询时不会将查询条件分词,所以查询不到。

最后

行有不得反求诸己,我是@刘小爱

一个白天上班晚上学习的95后沪漂,不为其它,只为学会自律做好自己,也愿我的每日打卡能给你带来勇气,欢迎点赞关注和评论。

网站搜索功能怎么实现_电商网站上的搜索功能是如何实现的?相关推荐

  1. axure实现搜索功能_Axure案例:电商网站下拉搜索框的制作

    Axure案例应用 电商网站的搜索框,对商品.店铺和卖家进行搜索.切换下拉框中的内容时,切换到不同的搜索输入框,样式也相应改变,下面通过设置下拉列表框"选中项于"逻辑条件,实现上述 ...

  2. 接口做的好怎么形容_电商网站平台怎么做?

    关于电商网站平台的开发问题,之前敖游已经分享了很多篇相关文章.电商网站平台怎么做?平台开发需要准备哪些资料?-- 这次我准备做一个总结性的发布.让准备做电商的朋友,看了这篇文章基本上可以找到想要的解决 ...

  3. mysql 计算近30天总金额_电商网站销售数据分析(MYSQL)

    1.背景及目的 数据来源于某CD电商网站的用户订单记录,共23570名用户.69659条数据. 通过分析数据,了解该网站的用户行为.忠诚度.生命周期价值等内容,为营销策略及方案提供一定的依据. 2.数 ...

  4. mysql表设计 不同价格_电商网站商品详情页,要能选择商品属情如大小,颜色,型号等,对应不同价格,数据库应该如何设计?...

    首先电商中的商品信息存储至少要2个表,第一张表:商品的基本信息,这个信息是在你刚进入商品 详情页面看到的数据,而你选择了商品规格(尺码,颜色等),此时展示的商品信息为具体的商品 下的规则信息,我们称之 ...

  5. 大型网站的架构演进从一个电商网站开始

    为了更好的理解,我们用电商网站来举例,作为一个交易类型的网站,一定会具备用户(用户注册.用户管理).商品(商品展示.商品管理).交易(下单.支付)这些功能假如我们只需要支持这几个基本功能,那么我们最开 ...

  6. java实现商品的分类_电商网站首页商品分类列表功能实现

    首先我们看下这个功能实现的效果: 后期理解补充: 其实这个功能的关键点就是分析这个模块的数据格式怎么样的? 对于这种商品列表展示的功能: 我们思路如下: 第一:开始展示的都是顶级列表,即parentI ...

  7. 电商系统哪部分会用到接口测试_电商网站测试点 还需要整理

    按照两种模式进行划分总结:1.按照测试类型 2.按照电子商务网站的系统架构 1.按照测试类型来划分 1.兼容性 1.1主要是在浏览器兼容(360浏览器IE6 IE8浏览器) 12.操作系统,主要体现在 ...

  8. 2019年B2B电商网站开发重点功能全解析!

    目前,不少制造企业都将B2B电商网站视为其数字化转型过程中必不可少的关键资产.我们在上篇文章中提及78%的B2B跨国企业均已开始涉猎在线销售,且绝大多数未进行数字化电商的企业,都计划在2019年投入到 ...

  9. 电商网站前端代码特点分析

    现在电子商务发展迅速,国内个人电商网站已经具有很大规模.电商网站相对传统的博客.论坛等,对用户体验和审美方面要求更高.排版布局等也在传统基础上有新的突破. 以下是一个小型电商网站的代码: <!D ...

最新文章

  1. 反射 -- 通过字符串操作对象中的成员
  2. 斯坦福AI 5小时DNA测序破世界纪录!创人类新里程碑,成本仅3万
  3. Wireshark数据包分析之DHCP协议包解读
  4. [BJDCTF2020]EasySearch
  5. VTK:Points之PowercrustExtractSurface
  6. android 模糊度处理_图像处理评价指标之模糊度、清晰度(待更新)
  7. AppleScript
  8. 多线程写mysql数据库_多线程读写mysql数据库
  9. 一起学习C语言:C语言循环结构(一)
  10. HDUOJ3549 - Flow Problem(网络流+最大流最小割+模板)
  11. 解决eclipse编辑jsp、js文件时,经常出现卡死的问题
  12. 数控铣削图案及编程_数控铣削编程与操作设计有全套图纸.doc
  13. 监控软件加入智能零售 试着用人脸辨识让消费力提升
  14. Linux学习第一周作业。
  15. php加cnzz,Vue单页面中添加cnzz统计
  16. 工作总结9:这一个月来犯的错
  17. 【元胞自动机】元胞自动机模拟交通事故道路通行量【含Matlab源码 356期】
  18. EnPass+WebDAV(一个跨平台密码管理解决方案)
  19. leetcode周赛,希望咸鱼,有一天可以薅到羊毛
  20. 拟人肌肉骨骼气动人工肌肉驱动的10自由度机器人手臂

热门文章

  1. 异或运算交换两个整数
  2. java公钥加密私钥解密过程_GPG加密解密过程
  3. Java-Redis 热部署问题
  4. Samba远程代码执行漏洞(CVE-2017-7494)复现
  5. MongoDB的Java驱动使用整理 (转)
  6. asp.net 使用Master模板页需要注意
  7. 每个大数据工程师都应该知道的OLAP 核心知识点
  8. 学习网站(不断更新)
  9. 每日一题(29)—— 如何引用一个已经定义过的全局变量
  10. STM32——时钟系统