elasticSearch使用nested嵌套查询

文章介绍了在Elasticsearch中如何存储具有树形结构的商品数据,包括使用nested类型处理嵌套数据,以及如何进行分组聚合来实现类似Solr的facet分面查询。此外,还展示了如何统计特定属性(如红色)的商品数量,并通过min_doc_count属性控制只显示商品数量大于10的类别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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": ["北京", "南京"]
      }]
  }]
}

转载:ElasticSearch 存储树形结构数据,统计树形数据。 - 大数据相关 - 程序喵 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值