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

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

感谢你的观看,谢谢你。

dc71c3155414984f49d9da4a44fd8836.png

学习计划安排如下:

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

一、索引库的增删改查

1新增数据

80b5ea295e8bb66794a531e2af08a102.png

①通过POST请求添加数据。

昨天我们给索引库设定了几个字段,以上述例子中的title字段为例,给其添加一条数据“小爱手机”,这样后面可以通过索引库来快速定位这条数据了。

通过响应结果可以看到result显示的是“created”,也就是新建了一个数据。

注意:这里的请求方式是POST,昨天关于索引库的创建时POST对应的是修改,PUT是新增,至于这儿为何是POST,暂时不清楚。

②随机生成id

系统会随机生成一个id来记录这条新增的数据,但是这个id太复杂了,不好记住。

所以在新增数据时自定义id。

2自定义id

3538c26f253fa8ea9c8a0277934c733c.png

在请求路径中指定id即可。

关于请求路径:索引库是liuxiaoai01,索引类型goods,id为1,添加了一条数据。

有了id之后我们就可以去进行修改和删除数据的操作了,如果不是系统随机的id不容易记住,使用起来不方便。

3修改数据

250c507af4bec8c9b95986c5a4728083.png

PUT请求就是修改了,但是要注意使用PUT必须要指定id,如果没有会报错。

其中关于id的作用:

  • 如果id在文档中不存在,则新增该数据,就相当于通过POST添加了一条数据。
  • 如果id在文档中存在,则修改对应id数据。

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

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

3删除数据

aa8e2339a27dd9f56566116750445238.png

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

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

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

4查询数据

ed4c3beb38a5f006c41b4f03bef5e39f.png

同样的方式,GET请求即对应的查询操作,根据id即可查询出对应的数据。

但是这种方法基本不会用。

要知道用户在搜索的时候,他怎么可能知道商品对应的id是多少?

所以用户查询的时候是使用不到id查询的,就需要全文检索技术了,

二、基本的搜索

1匹配所有(match_all)

47bc01600d82ac018963fd7923cdd73c.png

这里query代表的就是一个查询对象,里面编写具体的查询条件是怎样的:

  • match_all即代表了匹配所有,也就对应了上图中的例子。
  • match即匹配查询,怎么匹配可以自行说明。
  • term即词条查询,查询的时候不考虑分词。
  • ……除此之外,还有很多种查询类型。

其中查询条件根据查询类型的不同会有多种不同的写法,后续遇到了就说明。

现在主要讲解下match匹配查询和词条查询。

2匹配查询(match)

为了方便测试,我向索引库中添加了两条数据,现在索引库中一共有4条数据:

“小爱手机”,“大爱手机”,“超爱手机”以及“小爱电视”这4条。

1c6e31e10fc1e75bbd147bead70348e3.png

match本身也就是匹配的意思,现在匹配和“小爱电视”相关的数据。

运行会发现“手机”相关的数据都被搜索出来了,这是为什么呢?

因为“小爱电视”先会被分词成“小”“爱”以及“电视”,和分词相关的数据都会被搜索出来。

其中响应的结果有个score属性,也就是得分的意思:score越高表示结果越匹配,

在电商网站上搜索某品牌手机,会发现:

  • 该品牌其它产品也会被搜索出来。
  • 手机壳啊什么的也会被搜索出来。

就是这么一个道理。

and关系

23bec0065546f3012c42c4e0b6ebafb3.png

operator翻译过来是运算,意思就是将分词结果通过and连接起来。

查询条件是“小爱电视”,但是其被分词为了“小”,“爱”和“电视”,当然具体是不是这样分词我不太清楚,但思路是一样的:

  • 如果不做说明默认or连接,那么查询到的数据的分词只要满足任意一个就可以。
  • 如果说明是and连接,那么查询到的数据分词必须要包含“小”,“爱”和“电视”。

3词条匹配(term)

d9df2c19f02a9c4eac11df639519267e.png

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

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

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

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

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

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

最后

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/472838.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android蓝牙通信_Flutter通过BasicMessageChannel实现Flutter 与Android iOS 的双向通信

题记:——不到最后时刻,千万别轻言放弃,无论结局成功与否,只要你拼博过,尽力过,一切问心无愧。通过 Flutter 来进行移动应用开发,打包 Android 、iOS 双平台应用程序,在调用如相机、…

MapReduce既是编程模型又是计算框架

learn from 从0开始学大数据&#xff08;极客时间&#xff09; MapReduce 编程模型 包含 Map 和 Reduce 两个过程 map 的主要输入是一对 <Key, Value> 值&#xff0c;输出一对 <Key, Value> 值将相同 Key 合并&#xff0c;形成 <Key, Value 集合 >再将这个…

MapReduce 计算框架如何运作

learn from 从0开始学大数据&#xff08;极客时间&#xff09; 1. MapReduce 作业启动和运行机制 作业涉及三类关键进程&#xff1a; 大数据应用进程 这类进程是启动 MapReduce 程序的主入口&#xff0c;主要是指定 Map 和 Reduce 类、输入输出文件路径等&#xff0c;并提交作业…

linux忘记mysql密码_Linux下忘记Mysql密码的找回方法(图)

Mysql隔一段时间不访问&#xff0c;也许你会忘记访问密码&#xff0c;这时该怎么办&#xff0c;重装mysql吗&#xff1f;这个代价也太大了&#xff0c;我们这里介绍两种恢复密码的方法。方法一&#xff1a;因为Mysql密码存储于数据库mysql中的user表中&#xff0c;所以我们只要…

Yarn 资源调度框架

learn from 从0开始学大数据&#xff08;极客时间&#xff09; Hadoop 主要是由三部分组成&#xff1a; 分布式文件系统 HDFS分布式计算框架 MapReduce分布式集群资源调度框架 Yarn Yarn 的架构

mysql mtop 使用_MYSQLMTOP监控环境搭建

MySQLMTOP是一个由PythonPHP开发的MySQL企业级监控系统。系统由Python实现多进程数据采集和告警&#xff0c;PHP实现WEB展示和管理。最重要是MySQL服务器无需安装任何Agent&#xff0c;只需在监控WEB界面配置相关数据库信息功能非常强大&#xff1a;可对上百台MySQL数据库的状态…

Hive是如何让MapReduce实现SQL操作的?

learn from 从0开始学大数据&#xff08;极客时间&#xff09; 1. MapReduce 实现 SQL 的原理 SELECT pageid, age, count(1) FROM pv_users GROUP BY pageid, age;实现过程&#xff1a; 2. Hive 的架构 Hive 能够直接处理我们输入的 SQL 语句&#xff08;Hive SQL 语法与 标…

mysql spring隔离级别_MySQL事务与Spring隔离级别实现

1、事务具有ACID特性原子性(atomicity)&#xff1a;一个事务被事务不可分割的最小工作单元&#xff0c;要么全部提交&#xff0c;要么全部失败回滚。一致性(consistency)&#xff1a;数据库总是从一致性状态到另一个一致性状态&#xff0c;它只包含成功事务提交的结果隔离型(is…

Java JDK 安装配置

文章目录1. 下载安装2. 配置环境变量3. 检查安装成功1. 下载安装 下载地址&#xff1a;https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html&#xff08;需要注册下载&#xff09; 以下操作环境&#xff1a;WIN 10 2. 配置环境变量 JAVA_HOME 为…

mqtt如何判断设备离线_反渗透纯水设备膜元件如何离线清洗?

原标题&#xff1a;反渗透纯水设备膜元件如何离线清洗&#xff1f;在反渗透设备正常运行&#xff0c;无故障时&#xff0c;反渗透系统一般都用在线清洗保养、冲击性杀菌以及定期保护。但是&#xff0c;如果当反渗透膜元件重度污染时&#xff0c;在线清洗就显得无能为力了&#…

Java 变量、数据类型

文章目录1. 变量、常量2. 数据类型1. 变量、常量 final 修饰常量 public class Variable {static final int YEAR 365;// 常量使用 final 修饰, 不可修改&#xff0c;类似C的 conststatic int day 0;// 成员变量public static void main(String[] args){System.out.println…

html背景图不显示_批量显示多张有序排列的图标,使用精灵图CSS Sprites这种办法...

让你显示一个天气图标你会怎么显示呢&#xff1f;让你做一个简单的动图你会怎么采用什么方式呢&#xff1f;让你输出一个长期固定的图标列表你会怎么编写代码呢&#xff1f;如果不管性能&#xff0c;不用css&#xff0c;不用js&#xff0c;可能你会这么写html&#xff1a;<类…

mysql堵塞等级_MySQL 事务隔离级别

前言简单来说&#xff0c;数据库事务就是保证一组数据操作要么全部成功&#xff0c;要么全部失败。在 MySQL 中&#xff0c;事务是在引擎层实现的。原生的 MyISAM 引擎不支持事务&#xff0c;也是为什么 InnoDB 会取代它的重要原因之一。隔离性与隔离级别当数据库上有多个事务同…

Java 运算符、表达式、语句

文章目录1. 运算符2. 表达式3. 语句1. 运算符 赋值运算 , -, *, /, % 算术运算 , -, !, ~ 一元运算 关系运算 >, <, >, <, , ! 返回布尔 递增&#xff0c;递减--&#xff0c;支持&#xff08;float&#xff0c;double&#xff09;1, -1 逻辑运算 &&…

arrays中copyof复制两个数组_Java的数组初识和拷贝用法

方法重载&#xff1a;方法名称相同&#xff0c;参数列表不同。不能有两个名字相同、参数类型相同&#xff0c;返回值不同的方法。在进行方法重载时&#xff0c;方法的返回值一定相同&#xff01;&#xff01;&#xff01;方法递归特点&#xff1a;1.必须有结束条件2.每次递归处…

你不知道的 字符集和编码(编码字符集与字符集编码)

我的上篇文章&#xff0c;有朋友提出字符集和编码的区别&#xff0c;我在此立文和大家讨论下 常说的字符集和编码区别&#xff0c;其实就是编码字符集和字符集编码的区别&#xff0c;其实&#xff0c;单单如果只是说字符集&#xff0c;没有任何编码的概念的话&#xff0c;那么字…

hook 监控文件 c++_技术分享 | Linux 入侵检测中的进程创建监控

作者简介&#xff1a;张博&#xff0c;网易高级信息安全工程师。0x00 简介在入侵检测的过程中&#xff0c;进程创建监控是必不可少的一点&#xff0c;因为攻击者的绝大多数攻击行为都是以进程的方式呈现&#xff0c;所以及时获取到新进程创建的信息能帮助我们快速地定位攻击行为…

hive 创建表_2min快速了解,Hive内部表和外部表

在了解内部表和外部表区别前&#xff0c;我们需要先了解一下Hive架构 &#xff1a;大家可以简单看一下这个架构图&#xff0c;我介绍其中要点&#xff1a;Hive的数据分为两种&#xff0c;一种为普通数据&#xff0c;一种为元数据。元数据存储着表的基本信息&#xff0c;增删改查…

C#微信公众号开发系列教程二(新手接入指南)

此系列前面已经更新了两篇博文了&#xff0c;都是微信开发的前期准备工作&#xff0c;现在切入正题&#xff0c;本篇讲解新手接入的步骤与方法&#xff0c;大神可直接跳过&#xff0c;也欢迎大神吐槽。 微信公众号开发系列教程一&#xff08;调试环境部署&#xff09; 微信公众…

fastdfs windows部署_Go在windows下编译Linux可执行文件

欢迎关注我的头条号&#xff1a;Wooola&#xff0c;专注于Java、Golang、微服务架构&#xff0c;致力于每天分享原创文章、快乐编码和开源技术。前言最近楼主做了一个滑块验证码登录功能&#xff0c;但有个问题&#xff0c;悲观估计一天大约会产生两百多G临时图片放在fastdfs文…