聊的不止技术。跟着小帅写代码,还原和技术大牛一对一真实对话,剖析真实项目筑成的一砖一瓦,了解最新最及时的资讯信息,还可以学到日常撩妹小技巧哦,让我们开始探索主人公小帅的职场生涯吧!
(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了吧,行服的人又找过来了。”
(行服小姐姐拿着笔记本扭着小碎步向小帅工位走来)
行三小姐姐:“小帅哥哥,为什么我搜不出数据,辛苦帮我看看哈。”(指着屏幕说)
小帅:“不应该呀,我看看。”(凑近一看)
小帅:“原来你是这样搜的啊,我想想办法,你回去稍等下哈,我解决了跟你说声。”(愁眉苦脸表情)
行三小姐姐:“辛苦你啦,等你好消息哦!”
是怎样的搜索让小帅变成苦瓜脸呢?
未完待续…