打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
【微服务】163:搭建搜索微服务

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

感谢你的观看,谢谢你。

学习计划安排如下:

  • 正式开始在项目中实现搜索相关的功能,也就是elasticsearch的应用。
  • 关于搜索,会将其独立成一个微服务。
  • 任务量比较大,估计要花个几天的时间。

首先简单地说明一下这几天需要完成的任务:现在随便去电商网站搜索大致都会出现如下页面:

当然上述页面都是假数据,真的数据需要从数据库中查询到并完成渲染,后面会完成。

这次的数据格式是比较复杂的,它是对应了多张数据表,如果只是对应一张数据表,那简直不要太简单了。

当然关于具体的数据格式分析,文章后面会详细说明到,首先从微服务搭建开始。

一、搜索微服务搭建

可以使用spring脚手架搭建,这个昨天刚说明过,也可以自学创建Maven项目。

当然这不是重点,重点是文章后面的数据格式分析,但因为好久没有创建过微服务了,所以自行搭建做个回顾,其实无外乎核心三步骤。

1pom文件引入依赖

关于依赖,简单地做一个说明。

①eureka客户端依赖

搜索微服务要在注册中心完成注册。

②web启动器

因为项目用的是SpringBoot,所以使用的相关依赖是SpringBoot中的启动器,基本格式都是spring-boot-starter-对应的依赖

③elasticsearch

搜索的核心依赖了,格式同上。

④feign的使用

这个后面会使用到,到时候会做一个详细的说明。

⑤test依赖

SpringBoot测试相关的依赖,格式同②。

⑥商品微服务实体类

这是我们商品微服务中拆分的实体类,因为经常需要被其它各种微服务调用,所以将商品微服务拆分成了pojo和service两个子模块。

2yam配置文件

①指定服务对应的端口

②给搜索微服务取一个名称。

③elasticsearch相关配置

利用cluster-nodes说明自己装在虚拟机中的elasticsearch对应的ip加上端口号。

④eureka相关配置

3编写启动类

@SpringBootAppplication说明这个类是一个SpringBoot应用启动类。

@EnableDiscoveryClient说明是注册中心客户端,需要向注册中心注册服务。

@EnableFeignClients说明是feign客户端。

二、数据格式分析

看到一个业务需求,首先要考虑的也就是数据格式分析,捋一捋自己的思路:

  • 前端数据:HTML标签,这里vue组件。
  • Java数据:需要哪些实体类?
  • MySQL数据库数据:对应哪些数据表?

而我们常用的json格式数据也就是前端和后台数据相互沟通的一个桥梁。

在文章开头就说明过前端相关的数据,现在具体分析下。

1展示数据

观察页面的搜索结果,搜索手机也好,搜索电脑或者其它商品也罢,其结果一般会出现多个商品,也就是上图所示。

页面中展示的一个商品数据就是一个SPU,SPU是多个SKU共有集。

那么SPU和SKU又是什么?

这个在第150天学习笔记中详细讲解过,这里做一个简单的回顾:

  • 一个确定的商品就是一个SKU,它的颜色,内存大小,价格都确定下来了。

  • 而多个SKU共用的部分就是一个SPU,上述图片中,无论是什么颜色,什么大小的手机都是共用上述框中的数据。

但是仔细观察上述页面,选择商品大图下面的小图,商品会跟着变化,也就是SKU中的数据要实现动态变化。

所以我们需要的数据就是一个SPU,同时也需要包含SKU的信息。

2过滤数据

用户选择对应的选项,要过滤出对应的数据展示给用户,所以这些过滤条件都是需要存储在索引库中的,其中包括有:

商品分类,品牌,可以用来搜索的规格参数,以及价格。

这是观察到的最直观的数据。

三、Java实体类

上述我们分析了一通,分析的是需要保存到索引库中的数据,这样才能利用elasticsearch更好地实现搜索。

并不是说所有的数据都要存储到索引库中。

①展示的数据

搜索结果的基础数据是SPU,所以这个id也就是SPUid

subTitle:商品副标题,也就是商品卖点,比如满100减50这样的促销数据。

SKUS这个上述我们刚分析过,展示给用户看的是一个SPU,但是其需要包含了SKU的数据,就是很多个SKU,当然这里使用json结构的字符串来表示的。

它们都有一个特点:用户不会直接搜索到这些数据,所以不用分词,也不需要索引。

②过滤的数据

我们前面分析了很多,但是忽视了一个问题,就是用户在搜索框中输入的数据。

要知道用户在搜索框中输入的数据是有很多种可能的,可能是品牌,可能是某个参数,所以这里用all来表示全文检索数据。

用户还可以根据商品品牌、分类以及创建时间过滤,分别对应了上述3个字段。

price:商品一般都可以根据不同的价格区间完成过滤,这里用一个price集合来表示。

specs:可以过滤的规格参数有很多,这里使用键值对来表示。

最后

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

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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
京东全商品SKU提取,一键批量导出获取
一看就懂?15个交互与UI必懂的技术用语
电商SPU、SKU、SN是什么关系?
年销千万掌柜的搜索优化实操步骤
匿名提问:电商系统中sku编码、商品编码等应如何制定规则?
与淘宝交互,设计不知到有没有问题……
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服