【ES数据库】商品数据库搭建

在了解Elasticsearch之后,通过构建商品数据库来熟悉Elasticsearch的使用
Elasticsearch安装使用教程:【ES数据库】Elasticsearch安装使用

一、商品数据库介绍

下面以医疗器械商品为例,介绍商品数据库如何构建

在商品信息模块中,需要明确 SPU、SKU、商品类别、商品属性、商品属性模板这 几个名词的定义及其关联。
在这里插入图片描述
商品信息分为SPU(标准化产品单元,Standard Product Unit)、SKU(最小存货单 位,Stock Keeping Unit)。

  • SPU是用于描述属性值、特性相同的产品最小信息集合,具有可复用、易检索特性。
  • SKU 是描述商品的最小存货单元,通过 SKU 可确定具体的货物存量。

SPU 与 SKU 是一对多的关系,即 SPU 定义了一种商品,而根据选择特定的 商品型号、规格,可以定位到该种商品下具体的商品,也就是 SKU,获取 SKU 的价格、 库存信息以及特定的商品属性。
商品类别逐级细分,分为一级、二级、三级,例如一级类别为临床检验设备,对应 二级类别中生化分析设备、血液分析设备等,而二级类别中血液分析设备,则对应三级 类别中血细胞分析仪、血沉仪等。
因此,三级类别可对应多个同类 SPU,同类 SPU 抽象出多个商品属性,商品属性为同类 SPU 所具备的相同特征,例如血细胞分析仪都有 自动化程度这一相同特征。同类 SPU 下各个 SPU 拥有不同特征值,例如血细胞分析仪 具备自动化程度这一相同特征,在血细胞分析仪的每个 SPU 中,这一特征的特征值可为半自动、全自动、流水线。
在实际商品信息管理中,会同类 SPU 的多个商品属性进行归类,分成多组商品属性组。
商家添加 SPU 商品信息时,需要填写对应的商品属性,为了方便商家填写以及商品信息展示,本系统将商品属性组以及商品属性封装成模板,由后台管理员进行维护,商家添加 SPU 商品时,在选择了商品三级类别后,将显示该类别对应的同类 SPU 对应的多个商品属性组模板,供商家快速填写。


二、商品数据库搭建

商品类型(catalog)

  • 数据结构
    • 创建索引的映射信息
    • 请求形式 PUT
    • URL http://{ELK服务地址}:9200/{索引名称}
{
    "settings": {
        "number_of_shards": 3, 
        "number_of_replicas": 2
    },
    "mappings": {
        "properties": {
            "id": {
                "type": "long" // 商品类别标识
            },
            "catalog_type": {
                "type": "integer" // 一级(1)、二级(2)、三级(3)商品类别
            },
            "parent_id": {
                "type": "keyword" // 对应的父级分类
            },
            "catalog_name": {
                "index": "false",
                "type": "text"  // 商品类别名称
            }
        } 
    }
}
  • 测试数据
    • 使用医疗器械商品信息作为数据进行测试,批量添加
    • 请求形式 POST
    • 参数 _bulk // url结尾加上参数
    • URL http://{ELK服务地址}:9200/{索引名称}/{类型}/_bulk
[
{
    "catalog_1": "实验仪器",
    "catalog_2": [
        {
            "catalog_2": "生命科学",
            "catalog_3": ["PCR仪", "荧光定量仪", "细胞计数仪", "生物显微镜", "凝胶成像仪", "体式显微镜", "核酸提取仪", "电泳仪电源", "显微镜成像系统", "电穿与融合", "酶标仪", "洗板机", "电泳仪", "植物培养箱", "蛋白质电泳系统", "化学发光仪", "基因测序仪"]
        },
        {
            "catalog_2": "净化消毒",
            "catalog_3": ["纯水机", "超净工作台", "灭菌器", "生物安全柜"]
        },
        {
            "catalog_2": "分离浓缩",
            "catalog_3": ["分离浓缩配件", "磁分离器", "离心机", "真空泵"]
        },
        {
            "catalog_2": ";混合破碎",
            "catalog_3": ["搅拌器", "均质机", "摇床", "混合器"]
        },
    ]
},
{   
    "catalog_1": "临床检验",
    "catalog_2": [
        {
            "catalog_2": "尿液分析设备",
            "catalog_3": ["尿液分析仪", "粪便分析"]
        },
        {
            "catalog_2": "血液分析设备",
            "catalog_3": ["血细胞分析仪", "血凝分析仪", "血沉仪", "血流变分析仪", "微量元素分析仪"]
        },
        {
            "catalog_2": "分子诊断设备",
            "catalog_3": ["基因扩增仪"]
        },
        {
            "catalog_2": "病理设备",
            "catalog_3": ["切片机", "染色机", "制片机", "包埋机"]
        },
    ]
},
{   
    "catalog_1": "手术设备",
    "catalog_2": [
        {
            "catalog_2": "手术照明设备",
            "catalog_3": ["手术无影灯", "手术辅助照明灯"]
        },
        {
            "catalog_2": "超声手术设备",
            "catalog_3": ["超声刀", "超声刀头"]
        },
        {
            "catalog_2": "高频手术设备",
            "catalog_3": ["高频电刀", "等离子手术仪", "电刀笔", "电凝镊", "电极", "电极板","电缆线"]
        },
    ]
},
{   
    "catalog_1": "手术器械",
    "catalog_2": [
        {
            "catalog_2": "心胸外科",
            "catalog_3": ["心胸用钳", "心胸用钩针", "心胸用镊夹"]
        },
        {
            "catalog_2": "显微外科",
            "catalog_3": ["显微用剪", "显微用钳", "显微用镊夹", "显微用针钩"]
        },
        {
            "catalog_2": "整形科",
            "catalog_3": ["整形用镊", "整形用剥离器"]
        },
    ]
}
]
  • 添加数据
    • 添加单个商品类别数据
    • 请求形式 POST
    • Content-Type application/json
    • URL http://{ELK服务地址}:9200/{索引名称}/{类型}/{id}
    • id不是必填项,如果不传,ES会给一个默认值
{
    "id": "商品类别ID", // 一般自动生成
    "parent_id": "对应的父级分类ID",  // 一级分类不需要
    "catalog_name": "临床检验"
}

商品属性模版(spec)

  • 数据结构
    • 创建索引的映射信息
    • 请求形式 PUT
    • URL http://{ELK服务地址}:9200/{索引名称}
{
  "settings": {
    "number_of_shards": 3, 
    "number_of_replicas": 2
  },
  "mappings": {
    "properties": {
        "id": {
            "type": "long" // 商品属性组标识
        },
        "catalog_id": {
            "type": "keyword" // 对应的商品类别
        },
        "group_name": {
            "type": "keyword"  // 商品属性组名称
        },
        "spec_param": {   // 商品属性组对应的所有属性
            "type": "nested",
            "properties": {
                "param_id": {
                    "type": "long"
                }, // 商品属性标识
                "param_name": {
                    "type": "keyword"
                }, // 商品属性名称
                "describe": {
                    "type": "keyword"
                }, // 属性补充描述
                "options": {
                    "index": "false",
                    "type": "text"
                }, // 属性可选项
                "numeric": {
                    "type": "boolean"
                }, // 商品属性是否为数字
                "unit": {
                    "type": "keyword"
                },  // 如果是数字,设置数字单位
                "generic": {
                    "type": "boolean"
                },  // 是否是SPU通用属性
                "searching": {
                    "type": "boolean"
                },  // 属性是否用于搜索过滤
                "segment": {
                    "index": "false",
                    "type": "text"
                }  // 属性是数字且用于搜索过滤,则有数字区间
            }
        }
    } 
  }
}
  • 添加数据
    • 根据映射添加,这里不赘述

商品SPU

  • 数据结构
    • 创建索引的映射信息
    • 请求形式 PUT
    • URL http://{ELK服务地址}:9200/{索引名称}
{
    "settings": {
        "number_of_shards": 3, 
        "number_of_replicas": 2
    },
    "mappings": {
        "properties": {
            "id": {
                "type": "long" // 商品SPU id
            },
            "title": {
                "type": "text", // SPU名称
                "analyzer": "ik_max_word",
                "search_analyzer": "ik_smart",
                "fields": {
                    "sort": {
                        "type": "keyword"
                    }
                }
            },
            "sub_title": {
                "type": "text",  // SPU副标题(补充说明)
                "analyzer": "ik_max_word",
                "search_analyzer": "ik_smart",
                "fields": {
                    "sort": {
                        "type": "keyword"
                    }
                }
            },
            "catalog_id_1": {
                "type": "keyword"  // 一级分类id
            },
            "catalog_id_2": {
                "type": "keyword"  // 二级分类id
            },
            "brand_id": {
                "type": "keyword"  // 品牌id
            },
            "saleable": {
                "type": "boolean"  // 是否已上架
            },
            "valid": {
                "type": "boolean"  // 是否已删除
            },
            // SPU商品型号
            "type_list": {
                "type": "nested",
                "properties": {
                    "type_id": {
                        "type": "long"  // 商品型号id
                    },
                    "type_name": {
                        "type": "keyword"  // 商品型号名称
                    }
                }
            },
            // SPU商品规格List
            "prop_list": {
                "type": "nested",
                "properties": {
                    "prop_id": {
                        "type": "long"  // 商品规格id
                    },
                    "prop_name": {
                        "type": "keyword"  // 商品规格名称
                    }
                }
            },
            // 商品SPU通用属性
            "generic_spec_param": {
                "type": "nested",
                "properties": {
                    "group_id": {
                        "type": "keyword"
                    }, // 商品属性组id
                    "param_id": {
                        "type": "keyword"
                    }, // 商品通用属性id
                    "param_content": {
                        "type": "text",
                        "analyzer": "ik_max_word",
                        "search_analyzer": "ik_smart"
                    } // 商品通用属性名称
                }
            },
            // 商品SKU特有属性
            "special_spec_param": {
                "type": "nested",
                "properties": {
                    "group_id": {
                        "type": "keyword"
                    }, // 商品属性组id
                    "param_id": {
                        "type": "keyword"
                    }, // 商品SKU特有属性id
                    "param_content": {
                        "type": "text",
                        "analyzer": "ik_max_word",
                        "search_analyzer": "ik_smart"
                    } // 商品SKU特有属性名称
                }
            },
            "create_time": {
                "type": "date",
                "format": "yyyy-MM-dd HH:mm:ss"
            },  // 创建时间
            "last_update_time": {
                "type": "date",
                "format": "yyyy-MM-dd HH:mm:ss"
            }  // 上次修改时间
        } 
    }
}
  • 添加数据
    • 根据映射添加,这里不赘述

商品SKU

  • 数据结构
    • 创建索引的映射信息
    • 请求形式 PUT
    • URL http://{ELK服务地址}:9200/{索引名称}
{
    "settings": {
        "number_of_shards": 3, 
        "number_of_replicas": 2
    },
    "mappings": {
        "properties": {
            "id": {
                "type": "long" // 商品SKU标识
            },
            "spu_id": {
                "type": "keyword" // 商品SPU标识
            },
            "title": {
                "type": "text", // SKU名称
                "analyzer": "ik_max_word",
                "search_analyzer": "ik_smart",
                "fields": {
                    "sort": {
                        "type": "keyword"
                    }
                }
            },
            "img": {
                "index": "false",
                "type": "text"  // SKU商品主图
            },
            "img_set": {
                "index": "false",
                "type": "text"  // SKU附图(0-3张)
            },
            "price": {
                "type": "long"  // 销售价格(单位:分)
            },
            "enable": {
                "type": "boolean"  // 是否有效
            },
            "special_spec_param": {
                "type": "nested",
                "properties": {
                    "group_id": {
                        "type": "keyword"
                    }, // 商品属性组id
                    "param_id": {
                        "type": "keyword"
                    }, // 商品SKU特有属性id
                    "param_content": {
                        "type": "text",
                        "analyzer": "ik_max_word",
                        "search_analyzer": "ik_smart"
                    } // 商品SKU特有属性名称
                }
            },
            "type_id": {
                "type": "keyword"  // SKU对应型号
            },
            "prop_id": {
                "type": "long"  // SKU对应规格
            },
            "create_time": {
                "type": "date",
                "format": "yyyy-MM-dd HH:mm:ss"
            },  // 创建时间
            "last_update_time": {
                "type": "date",
                "format": "yyyy-MM-dd HH:mm:ss"
            }  // 上次修改时间
        } 
    }
}
  • 添加数据
    • 根据映射添加,这里不赘述
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值