从零开始搭建搜索推荐系统(五十二)ElasticSearch搜索利器

article/2025/9/18 12:35:03

聊的不止技术。跟着小帅写代码,还原和技术大牛一对一真实对话,剖析真实项目筑成的一砖一瓦,了解最新最及时的资讯信息,还可以学到日常撩妹小技巧哦,让我们开始探索主人公小帅的职场生涯吧!

(PS:本系列文章以幽默风趣风格为主,较真侠和杠精请绕道~)



一、小姐姐的到来

(上文提到,小帅将搜索1.0 like版本升级到1.1 全文索引版本后,搜索页面终于不再卡顿,正想放松一下的时候,却被腹黑男泼了一盆冷水…)

小帅:“你在说啥?”

江华:“呵呵,你看,曹操不就来了嘛。”

(这时候,行三小姐姐扭着小碎步正朝着小帅工位走来…小帅一下子眼睛就亮了)

行三小姐姐:“小帅哥哥,这个搜索页面挺好用的,就是能不能加一些限定条件呢?例如我只想搜某个店铺或者某个分类下面的xx。还有就是同类xx能不能去重只返回一个?对了,展示的信息再丰富一些,例如图片、视频、标签这些。”

小帅:“no婆布林,包在我身上!”(膨胀表情)

行三小姐姐:“谢谢你哟,还是小帅哥哥厉害!那我等着你的好消息啦。”(笔芯表情)


江华:“喂,麻烦擦一下你的哈喇子,都快淹掉工位了。”(无语表情)

小帅:“真香…我感觉我又可以了!”(深吸一口气)

老胡:“…”

江华:“…”

(小帅噼里啪啦一顿乱敲,打算用十分钟弄个1.2 限定去重优化版本,然鹅。。。)

二、新的麻烦

小帅:“老胡,老胡,江湖救急,行三小姐姐提的需求,让我同类的商品只返回一个,这玩意儿(搜索+折叠)在数据库好像实现不了,如果在返回的结果去重,分页大小就不一致,怎么办呢?我已经在小姐姐面前承诺了,呜呜呜…”

江华:“活该,我都说你高兴太早了吧!夸你两句都快飞上天了。”

老胡:“莫慌,先分析一下对方的诉求以及未来一段时间的演变趋势,然后再结合当前系统现状,再评估看看。”

(于是,小帅静下心来,认真分析了需求和演变趋势,发现当前DB架构已经满足不了需求的迭代了。。。)
在这里插入图片描述

三、新的架构

小帅:“以后行服肯定会提更多的过滤条件,过滤语句会很复杂,而且检索数据和详情数据要分库分表,分表后如果join查询,会变得更加复杂,脑壳痛!老胡老胡,怎么办呢?”

老胡:“不错,看来你已经意识到当前架构已经满足不了需求的迭代演进了,可以换个新架构来实现。在实际架构选型需要考虑ROI,也就是投入产出比,包括人力、资源环境、技术栈等因素。考虑到你当前的业务比较简单,而且看着你的需求跟elasticsearch提供的特性很契合,所以你可以考虑用elasticsearch作为检索引擎,mysql作为你数据存储引擎,结合使用。”

小帅:“哦哦,好啊,我试试!”
在这里插入图片描述
(于是,小帅噼里啪啦一顿乱敲,利用elasticsearch做数据过滤和去重,返回唯一键,然后用这些唯一键去数据库里查详情,检索与数据存储分离,充分利用各自特性,搜索系统2.0 elasticsearch版本出来了)

主要技能点

1、利用docker快速搭建ES环境。
《搭建大型分布式服务(八)Docker搭建开发环境安装ES》

2、利用封装的ETL工具,将数据从db里迁移到elasticsearch。
《搭建大型分布式服务(三十四)十分钟搭SpringBoot积木 - 数据重放DB数据转kafka消息》
《搭建大型分布式服务(三十二)十分钟搭Springboot积木 - 完成Kafka消息转存到ES》

3、利用脚手架使用springboot集成es客户端。
《搭建大型分布式服务(十八)Maven自定义项目脚手架》
《搭建大型分布式服务(九)Springboot整合ES和RestHighlevelClient》

4、利用elasticsearch的wildcard特性,实现模糊匹配,利用collapse特性,实现折叠功能。

GET skus/_search
{"from":0,"size":10,"query": {"bool": {"must": [{"wildcard": { // 模糊匹配,类似sql中的like查询"skuNameChinese.raw": {"value": "*牛奶*"}}}],"filter": { // 必要过滤,可以过滤多个条件"term": {"delFlag": "0"}}}},"_source":false, // 只返回唯一键,不返回数据字段,数据字段可以通过唯一键去db查询出来"sort":[{"id":{"order":"asc"}}],"collapse":{ // 指定折叠字段如productSpuId,并设置size=0,表示不适用内层inner_hits数据"field":"productSpuId","inner_hits":{"name":"productSpuId","ignore_unmapped":true,"from":0,"size":0,"version":false,"seq_no_primary_term":false,"explain":false,"track_scores":false}}
}

四、好景不长

小帅:“搞定,总算可以给小姐姐交差了,不然噼里啪啦打脸了!es还真的强大!”

江华:“es强不强小姐姐不知道,你是鶸估计大家都知道了。”

小帅:“滚。。。”

江华:“你看,写bug了吧,行服的人又找过来了。”

(行服小姐姐拿着笔记本扭着小碎步向小帅工位走来)

行三小姐姐:“小帅哥哥,为什么我搜不出数据,辛苦帮我看看哈。”(指着屏幕说)

小帅:“不应该呀,我看看。”(凑近一看)

小帅:“原来你是这样搜的啊,我想想办法,你回去稍等下哈,我解决了跟你说声。”(愁眉苦脸表情)

行三小姐姐:“辛苦你啦,等你好消息哦!”

是怎样的搜索让小帅变成苦瓜脸呢?

未完待续…


http://chatgpt.dhexx.cn/article/wgVkjxVd.shtml

相关文章

《智能搜索和推荐系统》总结

这本书主要分为4部分介绍,分别是搜索和推荐的基础,搜索系统基本原理,推荐系统的基本原理,工程应用。 第一部分:搜索和推荐的基础 主要讲了一下概率统计与应用数学的基础知识,比如概率论基础(概率…

推荐系统与搜索引擎的差异

转自:https://blog.csdn.net/cserchen/article/details/50422553 详细分析推荐系统和搜索引擎的差异陈运文 从信息获取的角度来看,搜索和推荐是用户获取信息的两种主要手段。无论在互联网上,还是在线下的场景里,搜索和推荐这两种方…

商品搜索引擎---推荐系统设计

一、前言 结合目前已存在的商品推荐设计(如淘宝、京东等),推荐系统主要包含系统推荐和个性化推荐两个模块。 系统推荐: 根据大众行为的推荐引擎,对每个用户都给出同样的推荐,这些推荐可以是静态的由系统管…

推荐一些不常见的搜索引擎

5.雅虎网 来自 Yahoo.com 的屏幕截图,2023 年 2 月 截至 2022 年 1 月,Yahoo.com(Verizon Media)的搜索市场份额为 11.2%。 雅虎的优势在于多元化,除搜索外还提供电子邮件、新闻、金融等服务。 二十多年来,…

相关搜索 --- 搜索中的推荐

0. 前面的瞎扯淡 互联网从开始出现,如果就信息获取方面的话,到现在经历了三个大的时期,最开始是人工信息的分类时期,作为一个上了岁数的人,是经历过那个时期的,那个时期如何来找信息呢?我们来看…

基于机器学习的搜索推荐系统

目录 一. 引言 1 二. 准备 2 一. 软件工程语言选择 2 二. 服务器的选取 2 三. 搜索服务 5 一. 搜索服务软件目录结构 5 二. 搜索服务功能 6 三. SPARQL语句分析 7 四. 经…

超好用的搜索引擎推荐

搜索引擎是我们信息资料搜集的最重要的渠道之一,用搜索引擎查找信息资料需要使用恰当的关键词和一些搜索技巧。目前国内主要的搜集引擎有如下10个,近期还有较多行业 型搜索冒出来,需找专业型行业资料可以使用行业型搜索引擎。 由于每个搜索引擎都有一定的局限性,可以把要…

搜索推荐相关

搜索算法 Learning to Rank方法: 1、单文档方法:根据query判断每个item的相似度 2、文档对方法:确定文档对的前后顺序 3、文档列表法:确定所有文档的先后顺序 Item:垂域、意图、语义相似性、item的热度、用户的搜索日…

推荐一个搜索引擎

yandex是一个俄罗斯搜索引擎。 https://yandex.com/ 最近很忙,月更。 水下文章。

ES-搜索推荐

1. 概述 搜索一般都会要求具有“搜索推荐”或者叫“搜索补全”的功能,即在用户输入搜索的过程中,进行自动补全或者纠错。以此来提高搜索文档的匹配精准度,进而提升用户的搜索体验,这就是Suggest。 ##四种Suggester 2. term sugge…

ul, li, a怎么用

<style type"text/css"> *{margin:0; padding:0;font-size:14px} body{padding-top:20px} ul,li{list-style: none} ul{background: yellow;} li{float:left; width:60px; height:50px;}//width:60px后加,不然ie li会比a宽 a{display:inline-block;padding:0 3…

html用ul li制作导航条

制作的导航条如图所示&#xff1a; 当鼠标滑过每个导航的时候&#xff0c;背景会变换颜色。技术点&#xff1a;将超链接a标签&#xff0c;转换成block标签&#xff0c;从而设置鼠标滑过时的背景色。代码如下所示&#xff1a; <html ><head><meta charset"…

HTML中的列表ol ul

<!DOCTYPE html> <html lang"en"> <head><title>列表</title> </head> <body><h3 style"background-color: rgb(102, 165, 165);">畅销图书榜</h3><hr/><!-- 有序列表 ol --><ol>…

ul及ol标签list-style-type介绍

ul及ol标签list-style-type介绍 1.ul/ol标签样式介绍 a.不设置ul中标签类型&#xff08;默认&#xff09;&#xff1a; 不设置ol中标签类型&#xff08;默认&#xff09;&#xff1a; b.设置方法代码&#xff1a; 在html中设置或者在CSS样式中设置 <style>#kl{list-s…

ul li 实例

之前使用过很多次的 ul li&#xff0c;不过都怎么规范&#xff0c;今天学习到一个整合“p、span、a”等标签的ul li实例&#xff0c;防止忘记&#xff0c;记录一下。 html代码 <span style"white-space:pre"> </span><li><h2>发明专利</h…

html中列表标签ul、ol、 dl的使用和介绍

一、UL列表介绍 ul 是无需列表&#xff0c;li列表里面的一条值&#xff0c;例如 <ul><li>中国</li><li>四川</li><li>成都</li></ul> 效果如下&#xff1a; 可以改变前面li的样式&#xff0c;通过给ul添加样式&#xff0c;其…

ul好看的li列表样式

以下是实际效果截图&#xff1a; 示例代码如下&#xff1a; <!DOCTYPE html> <html> <head> <style> .other-item-title{margin:10px 20px;padding:5px;line-height:30px;font-weight:400;border-bottom:1px solid #e8e9e7;color:#383937;position:re…

ul和ol的区别以及经验总结

一.ul是无序列表 网页中最为常见的列表&#xff0c;各个列表项之间为并列关系&#xff0c;没有顺序级别之分&#xff0c;如导航栏&#xff0c;新闻话题展示区等。 默认示例表现为&#xff08;默认带有实心圆&#xff09;&#xff1a; <ul><li>无序列表项1</li&g…

ul元素的使用

为了使网页更易读、排序有序、条理清晰&#xff0c;所以我们要学会ul元素——无序列表 效果图&#xff1a; 代码如下&#xff1a; <!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>元素的使用</title> </head&g…

为什么我们需要带上类型后缀?U/UL/ULL/L/LL

类型后缀 给变量赋值的时候分两个阶段。 第一步&#xff0c;如果没有指定字面量的类型&#xff0c;C99会找到一个能容纳字面量值的最小的带符号类型&#xff08;int / long int / long long int&#xff09;。 第二步&#xff0c;转换成左边变量类型并赋值。 long i 0xffff;…