专栏首页零基础自学Java【微服务】163:搭建搜索微服务

【微服务】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:可以过滤的规格参数有很多,这里使用键值对来表示。

本文分享自微信公众号 - 刘小爱(liuxiaoai946),作者:刘小爱

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-09-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【微服务】150:什么是SKU和SPU?

    具体数据需要我们从数据库中查询,因为我这边业务还未完成,所以显示的数据为:“该分组下没有参数”。

    刘小爱
  • 【日记】151微服务项目第21天

    凡事都有可能,永远别说永远。既然如此,那你这还不是再说永远?凡事都有可能,你这句话也有可能不可能,哼

    刘小爱
  • 【微服务】151:商品的分页查询

    这个和第146天实现的品牌查询是一样的,也是分页查询,当初我们是从前端页面到后台代码完整地写了一遍。

    刘小爱
  • 谈谈电商系统中的商品模块设计

    电商系统基本是开发者接触的最多的系统了,对于一个电商系统,商品模块显然是其核心功能,商品模块设计的好坏直接决定后续的开发进度和维护成本。

    憧憬博客
  • 数据挖掘的应用:如何选择商品关键词?

    什么是搜索? 搜索就是根据用户输入关键词,下面显示搜索结果。从用户的角度来说,就是根据自己设想的词来找到想要的商品。而从卖家的角度来说,就是根据用户输入的关键...

    CDA数据分析师
  • IJCAI 2018 | 阿里提出IncepText:全新多向场景文本检测模块

    机器之心
  • 去除字符串乱码和 不用循环给数组赋值 自有的时间调度器

    一、用正则表达式来将字符串I?���love�??�the�?great�?�?wall�in��?beijing更改为:I love the Great Wa...

    河湾欢儿
  • vue中导出Excel表格

    项目中我们可能会碰到导出Excel文件的需求,一般后台管理系统中居多,将table中展示的数据导出保存到本地。当然我们也可以通过一些处理来修改要导出的数据格式,...

    前端博客 : alili.tech
  • 微信小程序实战–集阅读与电影于一体的小程序项目(七)

    zhang_derek
  • MAC OS搭建Hadoop伪分布式集群

    输出java版本 虽然默认已经将Java的路径配置到了系统环境变量中,但由于后续需要使用JAVA_HOME,我们最好将JAVA_HOME显式写入到系统的配置文件...

    超哥的杂货铺

扫码关注云+社区

领取腾讯云代金券