分享好友 最新动态首页 最新动态分类 切换频道
总结四:商品搜索模块(面试专用)
2024-12-26 03:59

什么是搜索, 计算机根据用户输入的关键词进行匹配,从已有的数据库中摘录出相关的记录反馈给用户。

常见的全网搜索引擎,像百度、谷歌这样的。但是除此以外,搜索技术在垂直领域也有广泛的使用,比如淘宝、京东搜索商品,万芳、知网搜索期刊,csdn中搜索问题贴。也都是基于海量数据的搜索。

1.1、入口: 两个

首页的分类

搜索栏

1.2、列表展示页面

2.1、lucene与elasticsearch、solr

lucene只是一个提供全文搜索功能类库的核心工具包,而真正使用它还需要一个完善的服务框架搭建起来的应用。

好比lucene是类似于jdk,而搜索引擎软件就是tomcat 的。

目前市面上流行的搜索引擎软件,主流的就两款,elasticsearch和solr,这两款都是基于lucene的搭建的,可以独立部署启动的搜索引擎服务软件。由于内核相同,所以两者除了服务器安装、部署、管理、集群以外,对于数据的操作,修改、添加、保存、查询等等都十分类似。就好像都是支持sql语言的两种数据库软件。只要学会其中一个另一个很容易上手。

从实际企业使用情况来看,elasticSearch的市场份额逐步在取代solr,国内百度、京东、新浪都是基于elasticSearch实现的搜索功能。国外就更多了 像维基百科、GitHub、Stack Overflow等等也都是基于ES的。

2.2、elasticSearch的使用场景

  1. 为用户提供按关键字查询的全文搜索功能。
  2. 著名的ELK框架(ElasticSearch,Logstash,Kibana),实现企业海量日志的处理分析的解决方案。大数据领域的重要一份子。

2.3、elasticsearch的基本概念

cluster

整个elasticsearch 默认就是集群状态,整个集群是一份完整、互备的数据。

node

集群中的一个节点,一般只一个进程就是一个node

shard

分片,即使是一个节点中的数据也会通过hash算法,分成多个片存放,默认是5片。

index

相当于rdbms的database, 对于用户来说是一个逻辑数据库,虽然物理上会被分多个shard存放,也可能存放在多个node中。

type

类似于rdbms的table,但是与其说像table,其实更像面向对象中的class , 同一Json的格式的数据集合。

document

类似于rdbms的 row、面向对象里的object

field

相当于字段、属性

 

2.4、中文分词

elasticsearch本身自带的中文分词,就 是 单 纯 把 中 文 一个字一个字的分开,根本没有词汇的概念。但是实际应用中,用户都是以词汇为条件,进行查询匹配的,如果能够把文章以词汇为单位切分开,那么与用户的查询条件能够更贴切的匹配上,查询速度也更加快速。

分词器下载网址:https://github.com/medcl/elasticsearch-analysis-ik

IK分词器  smartcn

可以进行拓展分词 

动态分词

3.1、建立mapping

这时我们要思考三个问题

  1. 哪些字段需要分词
    1. 例如:商品名称   红米 手机 K30Pro
  2. 我们用哪些字段进行过滤(当做查询的条件
    1. 平台属性值
    2. 分类Id
    3. 品牌、价格区间、热度、评论、销量
  3. 哪些字段我们需要通过搜索查询出来。
    1. Id(隐藏),商品名称,价格,图片等。

以上分析的所有显示,以及分词,过滤的字段都应该在es中出现。Es中如何保存这些数据呢

“根据上述的字段描述,应该建立一个mappings对应的存上上述字段描述的信息!”

根据以上制定出如下结构:mappings

Index:goods

type:info

document: properties - rows

field: id,price,title…

Es中index默认是true。

info= Type

对应的mapping 结构

 

 

 

 

注意:ik_max_word 中文词库必须有

attrs:平台属性值的集合,主要用于平台属性值过滤。

3.2  构建实体与es mapping建立映射关系

 

 

 
 

 

3.2  初始化mapping结构到es中

 

通过kibana查看mapping

 

 

实现类

 

 

 

 

搜索的业务处理:

  1. 知道哪些是查询条件,分类的id 平台属性和平台属性值、品牌、热度、价格、关键字
  2. 构建查询语句,主要就是进行条件判断,看有没有某些条件,如果有就把条件给拼接进去。
  3. 执行查询
  4. 解析结果,查询的结果中获取到你想要的数据 封装到java对象中 返回。

 

想要的数据有  skuid 名称 价格 默认图片,筛选条件 平台属性、分类、品牌。在页面展示,供用户点击进行条件筛选。

es查询的dsl语句中我们是用了hotScore来进行排序的。

但是hotScore从何而来,根据业务去定义,也可以扩展更多类型的评分,让用户去选择如何排序。

这里的hotScore我们假定以点击量来决定热度。

那么我们每次用户点击,将这个评分+1。

1、 es大量的写操作会影响es 性能,因为es需要更新索引,而且es不是内存数据库,会做相应的io操作。

2、而且修改某一个值,在高并发情况下会有冲突,造成更新丢失,需要加锁,而es的乐观锁会恶化性能问题。

从业务角度出发,其实我们为商品进行排序所需要的热度评分,并不需要非常精确,大致能比出个高下就可以了。

利用这个特点我们可以稀释掉大量写操作。

用redis做精确计数器,redis是内存数据库读写性能都非常快,利用redis的原子性的自增可以解决并发写操作。

 redis每计10或100次数(可以被10或100整除)我们就更新一次es ,这样写操作就被稀释了10-100倍,这个倍数可以根据业务情况灵活设定。

Redis使用的是zset类型进行热度统计。

商品数据缓存 使用的是String类型。

 

 

 

 

 

 

接口调用

 
 
 

 1.你们项目在es里存了哪些数据

     搜索条件

             分类数据、品牌、平台属性、热度、价格、商品名称(关键字匹配

    展示的结果

              商品id、名称、价格、默认图片

 

 

  倒排索引是搜索的关键点,ES通过倒排索引实现搜索。

       正排索引:根据id去找到相对应的词

Id(索引

商品名称

1

红海行动

2

红海事件

3

红海行动事件

4

湄公河行动

      倒排索引:根据词,看这个词都在哪个id文档中出现了

商品名称

Id(索引

红海 行动

红海1、2、3;行动1、3、4

红海 事件

红海1、2、3;事件2、3

红海 行动 事件

红海1、2、3;行动1、3、4;事件2、3

湄公河 行动

湄公河4;行动1、3、4

 把指定好需要分词的 列 给进行分词处理,给词创建索引,记录这些词在哪些文档中出现了,当搜索的时候 根据词就能进行匹配,匹配词出现在哪些文档中,把文档数据拿到,实现搜索。

商品数据 在MySQL中,ES里也存了商品数据,原本 ES的数据 就是来自于MySQL的。如果 Mysql的商品数据修改了,ES中的是不是还是原来的。这样数据就不一致了。

 

    1.可以修改Mysql的时候 直接修改ES。(不好,耦合了

   Service-product工程修改mysql,直接操作es,由于操作es出问题,导致整个product工程不可用。由于product工程是整个电商中最基础的模块,很多模块都需要远程调用它,它不能因为别人 出问题。

   2.可以在 product工程中 远程调用list工程,实现es的修改。  也耦合。

  如果远程调用list服务 出问题了,也会影响product工程。

 

  3.使用MQ进行消息通知,当这个product工程修改了mysql之后,发送个消息  通知一下  list(搜 索)工程,product工程就不用管了,该干什么干什么,没影响了。

     list(搜索)工程拿到消息后,进行es数据修改。

     这种  解耦了。 最终一致。

 4、在商品数据修改前  先下架,下架了 ES里就没这个数据了,修改后,再重新上架,ES会重新添加。 好处:强一致。

 

 

最新文章
矩阵软件——智慧港口物流管控平台:打造港口物流新引擎
在全球贸易日益繁荣的今天,港口作为国际贸易的重要枢纽,其物流效率和管理水平至关重要。而智慧港口物流管控平台的出现,正为港口物流带来一场深刻的变革。矩阵软件打造的智慧港口管理平台以人工智能为技术核心,充分融合云计算、大数据、
新澳天天开奖资料大全三十三期|全新答案解释落实
  随着数字技术的发展和人们对生活品质的追求,交流与分享各个行业中收集和整理的资料变得越发重要。在彩票开奖等游戏领域,越来越多的人们开始关注如何更有效地利用开奖资料来进行数据分析,以期发现潜在的规律。本文旨在提供一个关于新
高中教师岗位述职报告
岁月流逝,流出一缕清泉,流出一阵芳香,回顾这段时间以来的工作,我们取得了不错的成绩,好好准备一份述职报告吧。怎样写述职报告才更能吸引眼球呢?下面是小编为大家收集的高中教师岗位述职报告,仅供参考,希望能够帮助到大家。我叫龙甸
如何在Word文档中有效删除多余的整页内容技巧总结
Word文档怎么删除一整页How to Delete an Entire Page in a Word Document在使用Word文档时,删除多余的页面是一个常见的需求。无论是因为误插入了空白页,还是文档内容的调整导致某些页面不再需要,掌握删除整页的方法都是非常重要的,m.e
山东9地2025寒假放假时间(最新公布)
马上年底了,各位学生及家长们,最期待的当然就是——寒假啦!山东9地已经公布了最新寒假时间,赶紧一起来看看把!济南义务教育阶段(小学、初中):2025年1月18日—2月12日,共计26天。高中阶段:2025年1月25日—2月12日,共计19天。青岛2025
华为10新功能介绍,华为全新功能揭秘
华为推出新功能,包括增强隐私保护、智能语音助手、超高清摄像头等。本文目录导读:产品概述新功能介绍华为作为全球领先的科技企业,近年来在产品创新方面取得了显著成就,我们将为您介绍华为最新推出的10系列产品的全新功能。华为10系列是
打破写作瓶颈,AI全能工具助你快速提升写作水平!
在信息爆炸的时代,写作已经成为人们日常生活中不可或缺的一部分。无论是学生的论文、职场的报告,还是个人的创作,写作的需求无处不在。然而,面对繁重的写作任务,许多人常常感到力不从心。为了解决这一问题,爱制作AI应运而生,它是一款
天翼云盘怎么用 天翼云盘使用方法介绍【详解】
  天翼云盘 怎么用?相信广大的用户们对于这款天翼云盘软件也是非常的熟悉了,这款软件可以帮助用户们进行文件的存储、分享以及备份等等,功能还是比较丰富强大的,但是还是有不少的小伙伴都不知道怎么使用这款软件,今天小编就给大家带来
图解爬虫,用几个最简单的例子带你入门Python爬虫
爬虫一直是Python的一大应用场景,差不多每门语言都可以写爬虫,但是程序员们却独爱Python。之所以偏爱Python就是因为她简洁的语法,我们使用Python可以很简单的写出一个爬虫程序。本篇博客将以Python语言,用几个
[软件]搜狗输入法PC版 v14.4.0.9307 精简优化版
* 去广告,精简优化,禁止自动升级,有效阻止程序广告弹窗!* 纯净无广告,无多余干扰提示,默认无不必要联网程序驻留!* 阻止检测升级联网请求,下载释放广告程序收集相关信息推送广告行为* 可选:云计算候选、词库更新及账户配置同步、工
相关文章
推荐文章
发表评论
0评