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

23 篇文章 1 订阅
3 篇文章 0 订阅

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

(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了吧,行服的人又找过来了。”

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

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

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

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

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

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

未完待续…

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值