商品模块的整理_sku属性_ElaticSearch查询
思路:需求分析–表设计–后台基本代码生成(根据数据库表进行生成基本的CRUD)–Swagger或postman测试–前台功能展示
所有的设计都是结合业务进行设计的
商品的属性
商品的属性包括:sku属性和显示属性
显示属性:页面以key和value的方式进行展示需求分析:DB中有一张表,存有显示属性和sku属性的值productType商品类型type类型:区分sku属性或显示属性目的:对商品的显示属性进行CRUD(前台的值和后台的属性对应上,就会自动回显)思路:前台添加多个显示属性,后台通过属性对象接受,然后使用afastJSON转为json字符串,然后保存到ext扩展表,注意此时是更新,不是插入。因为在保商品数据信息的时候,已经保存了显示属性的图文详情。sku属性:影响商品价格和库存的属性,也叫销售属性① 需求分析 用户在详情页面可以选择sku属性,切换不同的sku组合,价格和库存会进行动态的改变。首选后台添加sku属性和属性值------》前台才能进行搜索-------》商品模块添加sku按钮------》弹出dialog:动态获取sku的属性-------》sku的属性值,应该为手动输入-------》保存更新到数据库(包括删除、查询)都是在删除商品的时候进行删除和查询)形成sku数据时保存在sku表内,一个商品有多个sku。查询商品的时候,对应的将sku进行查询、删除。② sku表设计与sku相关联的数据商品表、扩展表(skuProperties)、sku表添加数据,需要动态的获取sku属性,---》从t_pecification表中进行获取,数据都是保存到sku表内,sku值应该保存在扩展表内 ,有三条数据,就对应三个属性 -----》简言之,扩展表内的sku属性字段内保存的就是属性表(属性表多了一个skuValue的字段)----》选择对应的sku③前台页面设计(后台需要一定的想象能力)dialog
商品的上架和下架
- ES知识储备
ElastisSearch 基于Lucene的全文检索框架。(另外还有solr)\1. 为什么有了Lucene还要使用ElasticSearch???lucene:需要在本地的磁盘创建索引IndexWriter : 写索引——① 写入本地磁盘——不适合实现集群,和缓存思维一致,磁盘文件的资源是不共享的,无法实现索引的同步,官方未提供对应的API ② 索引会占用磁盘空间,占用服务器使用的资源IndexSearch:搜索索引ES:①官方支持集群②基于lucene2. 特点① 针对文本进行全文检索② 支持集群③ 实现相关度排序④ 搜索精准,快速⑤ 客户端支持(kibana,支持restful风格的传输)3. 使用场景① 替代数据库的模糊查询,比数据库快,更加精准② 与文本搜索相关的baidu/google使用全文检索的技术4. 如何使用① 创建索引 index 对应数据库type 对应表格id 对应主键document 对应一条数据field 对应具体字段② 使用kibanaput /index/type/idput /crm/emp/1{"id":3"name":"zs"}------->将mysql的数据转换为es对应的document④ 使用步骤a . 安装es(零配置,开瓶即饮)b . 选择合适的客户端,如:kibanac . 查询数据库内的额数据,----》转换为es的document,并写入到es中d . 使用客户端,实现数据的CRUD⑤ 设置IK分词器⑥ 实现全局映射(不影响功能实现,简化配置)5. 实战演练替代数据库的模糊查询因为有很多的商品,用户的访问多,去数据库查询,性能较差,
- 商品的上架和下架
将mysql的数据库转换为es的文档上架: 即把mysql的数据写入es中,只有这样,用户才能在前台搜索到商品。下架:即将数据从es中进行删除,mysql中的数据不能进行删除,下架之后,用户在前台搜索不到商品es的java客户端:在SpingBoot进行es的实战
- ES在SpringBoo环境中t使用(Hello ElasticSearch)
SpringBoot内置有SpringDataJpa之类的1. 版本限制 2. 导入依赖 :web、tet、SpringDataElasticSearch3. application.yml配置文件 : 4. 启动类5.准备文档对象,并配置映射规则(分词器、分词字段、不分词字段)应该和mysql 的数据库对应一致,因为使用的是mysql数据写入es中,字段必须对应,才能进行匹配。类似于domain于es进行映射,打注解@Document(indexName="数据库名",type="表名")@Id@Feild(type=FieldType.Keyword)不进行分词 String 有text和keywordtext:要分词(方便进行搜索)keywor:不分词专有名词不分词、品牌等等有特殊意义的不进行分词如:name不进行分词,intro,需要进行分词5. 测试配置SpringBoot的测试类注解注入ElasticsearchTemplate: 与数据库进行连接创建索引配置映射实现CRUD ES启动之后默认端口为9002java客户端默认端口为9003kibana客户端默认端口为5601高级查询示例:① 创建NativeSeaechBuilder对象 builder②设置条件③获取一个query对象,通过builder.build()获取④执行查询
- 实战
1. 需求分析上架:就是mysql数据写入到ES中,修改为上架状态下架:删除ES中的数据,修改为下架状态2. 流程设计ES中不需要表设计,实现流程设计在商品模块,上架按钮。点击上架时,① 判断是否是下架状态不是,返回错误信息给用户② 修改mysql的商品的状态,以及上架的时间,并将数据查出来并放入到ES中,点击下架时:① 判断是否为上架状态不是,返回错误信息给yonnh②修改mysql的状态和下架时间,把数据从ES中删除-----修改状态:方式1:前端判断。可以减少后台压力,但postman可以绕过前台方式2:后端判断。安全,但是会增加后台的压力。因为需要进行数据库的查询。方式3:前台和后台都要判断。
项目实战
ES可以作为一个公共的查询服务,作为其他服务进行调用,因此将es抽取到common模块。
- 1、common_interface模块内导入ES依赖
<!--es依赖--><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-elasticsearch</artifactId></dependency>
- 2、common_service模块内配置name和节点
spring:data:elasticsearch:cluster-nodes: 127.0.0.1:9300cluster-name: elasticsearch #name必须为 elasticsearch
- 3、建立需要存入ES内的domain (此处单独建立,不适用和数据库内匹配的domain)
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;import static org.springframework.data.elasticsearch.annotations.FieldType.*;/*** indexName:就是数据库名 type:就是数据库表*/
@Document( indexName = "aigou_product",type = "product")
public class ProductEs {@Idprivate Long id;///字段:来自需求:查询和展示的数据// 关键字 :标题和副标题(品牌的名字分类的名字)// 分类id(ProductTypeId) 品牌id(BrandId) 价格:最小值minPrice 最大值maxPrice// 排序:销量saleCount 评价commentCount 新品onSaleTime 人气viewCount 价格minPrice@Field(type = Text, analyzer = "ik_max_word", searchAnalyzer = "ik_max_word")private String queryContent;// name + subName +品牌的名字+ 分类的名字private Long productTypeId;private Long brandId;private Integer minPrice;private Integer maxPrice;private Integer saleCount;private Integer commentCount;private Long onSaleTime;private Integer viewCount;//分页返回数据:价格minPrice 已售多少saleCount 名字//这些:以后都从mysql中查询,生成静态页面,就不放在es中// 详情页面: 标题和副标题(Product), 累计评价数:commentCount// sku相关的东西 显示属性(扩展表)// 图文详情(直接从数据获取) 媒体属性:媒体属性不用于查询,所以直接从数据库获取//---------------此处省略getter和setter、toString方法
}
- 4、配置其他服务调用的接口和回调的函数
import cn.lzj.aigou.client.doc.ProductEs;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;import java.util.List;@FeignClient(value="COMMON-PROVIDER",fallback = EsFallback.class)
public interface EsClient {//上架@PostMapping("/common/es/save")
// @RequestMapping(value = "/common/es/save",method = RequestMethod.POST)void save(@RequestBody ProductEs productEs);@PostMapping("/common/es/saveAll")
// @RequestMapping(value = "/common/es/saveAll",method = RequestMethod.POST)void saveAll(@RequestBody List<ProductEs> list);//下架@PostMapping("/common/es/delete")
// @RequestMapping(value = "/common/es/delete",method = RequestMethod.POST)void delete(@RequestBody Long id);}
package cn.lzj.aigou.client;import cn.lzj.aigou.client.doc.ProductEs;
import org.springframework.stereotype.Component;import java.util.List;@Component
public class EsFallback implements EsClient{@Overridepublic void save(ProductEs productEs) {}@Overridepublic void saveAll(List<ProductEs> list) {}@Overridepublic void delete(Long id) {}
}
此时Es的服务就已经搭建好了
3. 实现前台上架或下架---》调用controller ----》service:使用feign进行调用后台:提供公共服务定义ES客户端接口,实现CRUDfangf controller实现接口service:封装crud方法封装映射?domain内进行配置。只配置需要搜索的内容,放入ES中,以供前台查询展示。所以应该单独写一个domain来映射ducument的字段前台需要哪些数据来进行一个数据的搜索?分析业务
商品模块的整理_sku属性_ElaticSearch查询相关推荐
- 简单Java的商品模块功能
电商系统的商品模块功能 简介 该系统包含五个类,一个商品类.商品方法实现类.管理员类.管理员管理类.主界面类. 商品类(商品ID,商品名,类别名,单价,库存量,产地) 管理员类(账户.密码) 实现功能 ...
- [PHP] B2B2C商品模块数据库设计
/**************2016年4月25日 更新********************************************/ 知乎:产品 SKU 是什么意思?与之相关的还有哪些? ...
- 【18-业务开发-基础业务-商品模块-分类管理-前后端管理系统的启动-为分类管理表增加数据-Json插件的下载-返回具有层级目录、父子关系结构的数据】
一.知识回顾 [0.三高商城系统的专题专栏都帮你整理好了,请点击这里!] [1-系统架构演进过程] [2-微服务系统架构需求] [3-高性能.高并发.高可用的三高商城系统项目介绍] [4-Linux云 ...
- 电商商城-商品模块数据库设计
文章目录 行业概念介绍 数据库设计 调研的高Star开源作品 行业概念介绍 SPU:标准化产品单元(Standard Product Unit),是商品信息聚合的最小单位,是一组可复用标准化信息的集合 ...
- JSD-2204-酷鲨商城(管理商品模块)-Day02
1.补充 1.1嵌套路由(补充) 一旦使用了嵌套路由,必须有某个View是不完整的(其内部有某个区域使用了<router-view/>,是由其它View来负责显示的),这样的View不应该 ...
- 秒杀系统(二)——商品模块展示技术难点
秒杀系统--商品模块展示技术难点 商品详情页 商品详情页是展示商品详细信息的一个页面,承载在网站的大部分流量和订单的入口.京东商城目前有通用版.全球购.闪购.易车.惠买车.服装.拼购.今日抄底等许多套 ...
- mysql商品规格设计_如何设计电商系统商品模块-规格
简介 商品模块是电商系统核心模块,本文主要讲解商品模块功能需求.术语概念.功能设计.数据结构.相关功能设计思路. 近几年开发了很多电商类系统,将我们一些设计经验整理并分享给大家. 需求分析 电商系统后 ...
- 生鲜配送ERP系统_对商品模块数据模型与界面设计的思考【Java 开源版】杭州生鲜配送系统_升鲜宝_SaaS全链路生鲜供应链管理系统_升鲜宝
生鲜配送ERP系统_对商品模块数据模型与界面设计的思考及简要分析[Java 开源版]杭州生鲜配送系统_升鲜宝_SaaS全链路生鲜供应链管理系统_升鲜宝 一直在研究与改造自己的生鲜配送系统,越来越觉得后 ...
- 商城 商品模块 数据库 表设计
商城 商品模块 数据库 表设计 要实现一个商城,对于商品模块中的数据库表设计不懂,主要是:相同类别的产品的产品参数相同,不同类别的不同,这里就不懂要怎么设计了,所以上网找几篇博客了解. 什么是SPU. ...
最新文章
- lucene.net mysql_用Lucene[1].net对数据库建立索引及搜索+
- 城联数据TSM技术方案起底
- python随机抽取人名_python的random
- 使用ELK堆栈进行日志聚合
- kill所有java进程
- 如何删除在Github中创建的项目
- 利用python对图像进行傅里叶变换_Python 实现图像快速傅里叶变换和离散余弦变换...
- Java设计模式笔记------设计原则完结
- YUV的原始数据文件转rgb使用cv2显示
- 自考c语言程序设计02600,自考02600《C语言程序设计》模拟试卷十一
- 【fiddler手机抓包不能上网问题解决】
- C#小知识之中英文转换、去空格
- 嵌入式Linux —— usb鼠标驱动
- win10蓝牙已配对连接不上_win10蓝牙耳机连接不上怎么办_win10蓝牙耳机连接不上的解决方法...
- 红米K40使用半个月,谈谈上手体验,“优缺点”非常明显!
- CS5213HDMI转VGA带3.5mm音频转接线|HDMI转VGA带3.5MM音频方案
- iOS9获取手机序列号serialNumber(UDID)
- AD18导出BOM清单报错
- Android中通过USB接口与和PC进行通讯的demo程序
- ubuntu 黑体_Ubuntu 黑体解决方案