商品上架:SKU在ES中存储模型分析
腾讯云的截图:
============================
把后台vue项目和谷粒商城的java项目跑起来:
cnpm install一下
npm run dev 跑起来:
还是有错误。。。。
百度后说,删除node_modules 然后重新npm install
npm install 这个命令也报错了。。
cnpm install :
ok 了,再次npm run dev跑:
ok 可以运行了。
后台跑起来,nacos打开,虚拟机搞开。。
spu ===规格
SPU是标准化产品单元,区分品种;SKU是库存量单位,区分单品;
分析下在ES中保存什么?ES毕竟是存在内存中,理论上集群扩展但是成本高,所以还是合理点好。
假设用这种存储方式,attr指的就是规格,也就是SPU
第二种方式,存两个索引,这样就不冗余,但是存在问题:
假设检索的时候,10000个SKU ,其中有规格4000个,每次都要分布查询规格,差规格的话,4000个,long 的话大概就是320M ,用户多了就是几十个G,就很慢了。
所以上面第一种空间浪费了,但是时间减少了。
PUT product { "mappings":{ "properties": { "skuId":{ "type": "long" }, "spuId":{ "type": "keyword" }, "skuTitle": { "type": "text", "analyzer": "ik_smart" }, "skuPrice": { "type": "keyword" }, "skuImg":{ "type": "keyword", "index": false, "doc_values": false }, "saleCount":{ "type":"long" }, "hasStock": { "type": "boolean" }, "hotScore": { "type": "long" }, "brandId": { "type": "long" }, "catalogId": { "type": "long" }, "brandName": { "type": "keyword", "index": false, "doc_values": false }, "brandImg":{ "type": "keyword", "index": false, "doc_values": false }, "catalogName": { "type": "keyword", "index": false, "doc_values": false }, "attrs": { "type": "nested", "properties": { "attrId": { "type": "long" }, "attrName": { "type": "keyword", "index": false, "doc_values": false }, "attrValue": { "type": "keyword" } } } } } }
最终确定的索引的映射就如上。
注意 attr属性标注成了:nested
===========================
在es中 nested 叫做嵌入式的。
如果是数组类型的字段,es会做扁平化处理:
比如,存储:
会被ES解析成:
这样会出现什么问题呢,就是比如,要访问 alice smith, 但是一开始又没有存储这个数据,如果检索,扁平化处理就会检索到。
如果加了nested 就不会被检索到。