1、ES 商品索引中,如何存储这种数据结构?
-
使用 nested 嵌套类型?
-
使用 join 特殊类型?
2、ES 如何把所有的商品项目类型树结构整合为一个树?
实现功能有点类似于 solr 的 facet 分面查询。
-
ES 使用分组
如下测试代码中,插入的3条数据,聚合的树结构,应为
Bash
亮白美甲
- 款式
- 红色
- 白色
极光美甲
- 颜色
- 红色
- 兰色
- 蓝色
- 产地
- 北京
- 杭州
科技美甲
- 款式
- 红色
- 白色
- 黑色
- 产地
- 北京
- 南京
那么,该如何使用es查询呢?
3、ES 如何统计红色字体的商品数量?
1、用一条查询实现出上图的红色字体统计结果。
-
答:如下测试代码中的统计
2、如何只统计出项目类型树中,商品数量 >10 的显示?
-
答:使用 ES 的 min_doc_count 属性控制。
首先创建索引:
PUT /my_demo
{
"mappings": {
"properties": {
"id": { "type": "integer" },
"productName": { "type": "keyword" },
"price": { "type": "double" },
"categoryCode": { "type": "keyword" },
"projectType": { // 项目类型
"type": "nested",
"properties": {
"id": { "type": "integer" },
"name": { "type": "keyword" },
"attr": { // 属性
"type": "nested",
"properties": {
"name":{ "type": "keyword" },
"value": { "type": "keyword" } // 属性值
}
}
}
}
}
}
}
2、禁用动态字段
Bash
# 禁用动态字段
PUT /my_demo/_mapping
{
"dynamic":"strict"
}
3、插入数据
Bash
# 一个项目,一个属性,多个属性值
PUT /my_demo/_doc/1
{
"id": 1,
"productName": "美甲商品1",
"categoryCode": "tag_mei_jia",
"projectType":[{
"id": 101,
"name": "极光美甲",
"attr":[{
"name": "颜色",
"value":["红色", "兰色"]
}]
}]
}
# 一个项目,一个属性,多个属性值
PUT /my_demo/_doc/2
{
"id": 2,
"productName": "美甲商品2",
"categoryCode": "tag_mei_jia",
"projectType":[{
"id": 102,
"name": "亮白美甲",
"attr":[{
"name": "款式",
"value":["红色", "白色"]
}]
}]
}
# 多个项目,多个属性,多个属性值
PUT /my_demo/_doc/3
{
"id": 3,
"productName": "美甲商品3",
"categoryCode": "tag_mei_jia",
"projectType":[{
"id": 101,
"name": "极光美甲",
"attr": [{
"name": "颜色",
"value": ["红色", "蓝色"]
},{
"name": "产地",
"value": ["北京", "杭州"]
}]
},{
"id": 103,
"name": "科技美甲",
"attr": [{
"name": "款式",
"value": ["红色", "白色", "黑色"]
},{
"name": "产地",
"value": ["北京", "南京"]
}]
}]
}