前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【微服务】163:搭建搜索微服务

【微服务】163:搭建搜索微服务

作者头像
刘小爱
发布2020-09-28 10:19:07
1K0
发布2020-09-28 10:19:07
举报
文章被收录于专栏:零基础自学Java

学习计划安排如下:

  • 正式开始在项目中实现搜索相关的功能,也就是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:可以过滤的规格参数有很多,这里使用键值对来表示。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 刘小爱 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、搜索微服务搭建
  • 二、数据格式分析
  • 三、Java实体类
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档