思路:需求分析–表设计–后台基本代码生成(根据数据库表进行生成基本的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

商品的上架和下架

  1. 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查询相关推荐

  1. 简单Java的商品模块功能

    电商系统的商品模块功能 简介 该系统包含五个类,一个商品类.商品方法实现类.管理员类.管理员管理类.主界面类. 商品类(商品ID,商品名,类别名,单价,库存量,产地) 管理员类(账户.密码) 实现功能 ...

  2. [PHP] B2B2C商品模块数据库设计

    /**************2016年4月25日 更新********************************************/ 知乎:产品 SKU 是什么意思?与之相关的还有哪些? ...

  3. 【18-业务开发-基础业务-商品模块-分类管理-前后端管理系统的启动-为分类管理表增加数据-Json插件的下载-返回具有层级目录、父子关系结构的数据】

    一.知识回顾 [0.三高商城系统的专题专栏都帮你整理好了,请点击这里!] [1-系统架构演进过程] [2-微服务系统架构需求] [3-高性能.高并发.高可用的三高商城系统项目介绍] [4-Linux云 ...

  4. 电商商城-商品模块数据库设计

    文章目录 行业概念介绍 数据库设计 调研的高Star开源作品 行业概念介绍 SPU:标准化产品单元(Standard Product Unit),是商品信息聚合的最小单位,是一组可复用标准化信息的集合 ...

  5. JSD-2204-酷鲨商城(管理商品模块)-Day02

    1.补充 1.1嵌套路由(补充) 一旦使用了嵌套路由,必须有某个View是不完整的(其内部有某个区域使用了<router-view/>,是由其它View来负责显示的),这样的View不应该 ...

  6. 秒杀系统(二)——商品模块展示技术难点

    秒杀系统--商品模块展示技术难点 商品详情页 商品详情页是展示商品详细信息的一个页面,承载在网站的大部分流量和订单的入口.京东商城目前有通用版.全球购.闪购.易车.惠买车.服装.拼购.今日抄底等许多套 ...

  7. mysql商品规格设计_如何设计电商系统商品模块-规格

    简介 商品模块是电商系统核心模块,本文主要讲解商品模块功能需求.术语概念.功能设计.数据结构.相关功能设计思路. 近几年开发了很多电商类系统,将我们一些设计经验整理并分享给大家. 需求分析 电商系统后 ...

  8. 生鲜配送ERP系统_对商品模块数据模型与界面设计的思考【Java 开源版】杭州生鲜配送系统_升鲜宝_SaaS全链路生鲜供应链管理系统_升鲜宝

    生鲜配送ERP系统_对商品模块数据模型与界面设计的思考及简要分析[Java 开源版]杭州生鲜配送系统_升鲜宝_SaaS全链路生鲜供应链管理系统_升鲜宝 一直在研究与改造自己的生鲜配送系统,越来越觉得后 ...

  9. 商城 商品模块 数据库 表设计

    商城 商品模块 数据库 表设计 要实现一个商城,对于商品模块中的数据库表设计不懂,主要是:相同类别的产品的产品参数相同,不同类别的不同,这里就不懂要怎么设计了,所以上网找几篇博客了解. 什么是SPU. ...

最新文章

  1. lucene.net mysql_用Lucene[1].net对数据库建立索引及搜索+
  2. 城联数据TSM技术方案起底
  3. python随机抽取人名_python的random
  4. 使用ELK堆栈进行日志聚合
  5. kill所有java进程
  6. 如何删除在Github中创建的项目
  7. 利用python对图像进行傅里叶变换_Python 实现图像快速傅里叶变换和离散余弦变换...
  8. Java设计模式笔记------设计原则完结
  9. YUV的原始数据文件转rgb使用cv2显示
  10. 自考c语言程序设计02600,自考02600《C语言程序设计》模拟试卷十一
  11. 【fiddler手机抓包不能上网问题解决】
  12. C#小知识之中英文转换、去空格
  13. 嵌入式Linux —— usb鼠标驱动
  14. win10蓝牙已配对连接不上_win10蓝牙耳机连接不上怎么办_win10蓝牙耳机连接不上的解决方法...
  15. 红米K40使用半个月,谈谈上手体验,“优缺点”非常明显!
  16. CS5213HDMI转VGA带3.5mm音频转接线|HDMI转VGA带3.5MM音频方案
  17. iOS9获取手机序列号serialNumber(UDID)
  18. AD18导出BOM清单报错
  19. Android中通过USB接口与和PC进行通讯的demo程序
  20. ubuntu 黑体_Ubuntu 黑体解决方案

热门文章

  1. mysql 中文 java_Java 读取 MySQL 中文 乱码
  2. uni-app卖座电影多端开发纪实(五):使用插件
  3. js判断字符串包含某个字符串的多种方法
  4. 社群运营,快速提升社群活跃度的六个小技巧
  5. android 异步加载图片总结
  6. MacOS安装sshpass
  7. 【数学】双根号求值域问题
  8. 在饥荒服务器中添加并更新mod
  9. hpm128无法共享打印_mfp m128fn打印机怎么设置网络连接,怎么共享打印机
  10. android 静态图片自动切换,Android静态图片人脸识别的完整demo(附完整源码)