商品上架: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 就不会被检索到。