带你读《Elastic Stack 实战手册》之22:——3.4.2.7.Nested数据类型(下)

本文涉及的产品
Elasticsearch Serverless通用抵扣包,测试体验金 200元
简介: 带你读《Elastic Stack 实战手册》之22:——3.4.2.7.Nested数据类型(下)

《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.7.Nested数据类型(上) https://developer.aliyun.com/article/1230844


定义分组为 Nested 数据结构类型

 

PUT goods_info_nested
{
  "mappings": {
    "properties": {
      "goodsName": {
        "type": "text",
        "analyzer": "ik_smart"
      },
      "skuCode": {
        "type": "keyword"
      },
      "brandName": {
        "type": "keyword"
      },
      "shopCode": {
        "type": "keyword"
      },
      "publicPrice": {
        "type": "float"
      },
      "groupPrice": {
        "type": "nested",
        "properties": {
          "boxLevelPrice": {
            "type": "float"
          },
          "level": {
            "type": "keyword"
          }
        }
      }
    }
  }
}
#插入同样的测试数据
POST goods_info_nested/_bulk
{"index":{"_id":1}}
{"goodsName":"美国苹果","skuCode":"skuCode1","brandName":"美国苹果","shopCode":"sc00001","publicPrice":"8388.88","groupPrice":[{"boxLevelPrice":"4888.00","level":"A"},{"boxLevelPrice":"6888.00","level":"B"}]}
{"index":{"_id":2}}
{"goodsName":"山东苹果","skuCode":"skuCode2","brandName":"山东苹果","shopCode":"sc00001","publicPrice":"7388.88","groupPrice":[{"boxLevelPrice":"5888.00","level":"A"},{"boxLevelPrice":"4888.00","level":"B"}]}
#查询
POST goods_info_nested/_search
{
  "query": {
    "nested": {
      "path": "groupPrice",
      "query": {
        "bool": {
          "must": [
            {
              "match": {
                "groupPrice.level": "A"
              }
            },
            {
              "match": {
                "groupPrice.boxLevelPrice": "4888.00"
              }
            }
          ]
        }
      }
    }
  }
}
#返回:
"hits" : [
      {
        "_index" : "goods_info_nested",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 1.3862942,
        "_source" : {
          "goodsName" : "美国苹果",
          "skuCode" : "skuCode1",
          "brandName" : "美国苹果",
          "shopCode" : "sc00001",
          "publicPrice" : "8388.88",
          "groupPrice" : [
            {
              "boxLevelPrice" : "4888.00",
              "level" : "A"
            },
            {
              "boxLevelPrice" : "6888.00",
              "level" : "B"
            }
          ]
        }
      }
    ]

同样查询 groupPrice.boxLevelPrice 为"4888.00" 且 level 为"A"的数据,显然只有文档 1 满足,通过查询也验证了此结论,说明 Nested 查询生效,解决了嵌套查询的问题。

 

Nested 在 Aggregation 中的应用

 

在对 Nested Object 进行聚合操作时,我们需要使用到 Nested Aggregation,我们需要聚合查询最大的分组价格( groupPrice )

 

POST /goods_info_nested/_search
{
  "query": {
    "match": {
      "goodsName": "苹果"
    }
  },
  "aggs": {
    "groupPrice": {
      "nested": {
        "path": "groupPrice"
      },
      "aggs": {
        "max_price": {
          "max": {
            "field": "groupPrice.boxLevelPrice"
          }
        }
      }
    }
  }
}
#返回
{
  .....
  "aggregations" : {
      "groupPrice" : {
        "doc_count" : 4,
        "max_price" : {
          "value" : 6888.0
        }
      }
     }
}

创作人简介

李增胜,Elasticsearch 认证工程师、PMP 项目管理认证,现就职于汇通达网络股份有限公司,任产业交易平台交易域技术经理,从事微服务架构、搜索架构方向开发与管理工作。技术关注:电商、产业互联网等领域。

博客:https://www.jianshu.com/u/59dceda66b57

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
26天前
|
缓存 自然语言处理 API
阿里巴巴国际站关键字搜索 API 实战:3 步搞定多语言适配 + 限流破局,询盘量提升 40%
跨境电商API开发常陷合规、多语言、限流等坑。本文详解从国际合规(GDPR/CCPA)到参数优化、数据结构化及区域化搜索的全链路方案,附Python代码模板与缓存重试架构,助力提升调用成功率至99%+,精准询盘增长42%。
|
Java 应用服务中间件 测试技术
Maven学习笔记(一):Maven基础(基于命令行的学习和应用)
Maven 是一款 Java 项目构建工具,主要用于管理 jar 包及其依赖关系。 本文主要了解Maven基础知识及基础应用,旨在为之后的进一步学习奠定基础。 内容上几近全为学习《尚硅谷2022版Maven教程》整理所得。 仅供参考。
797 81
Maven学习笔记(一):Maven基础(基于命令行的学习和应用)
|
JavaScript 测试技术 开发工具
Git 分支设计规范
Git 分支设计规范
463 11
|
边缘计算 Cloud Native 数据管理
【阿里云云原生专栏】云原生背景下的AIoT布局:阿里云Link平台解析
【5月更文挑战第29天】阿里云Link平台,作为阿里云在AIoT领域的核心战略,借助云原生技术,为开发者打造一站式物联网服务平台。平台支持多协议设备接入与标准化管理,提供高效数据存储、分析及可视化,集成边缘计算实现低延时智能分析。通过实例代码展示,平台简化设备接入,助力智能家居等领域的创新应用,赋能开发者构建智能生态系统。
429 3
|
12月前
|
机器学习/深度学习 供应链 算法
量子计算:从理论到实践的跨越
量子计算基于量子力学原理,利用量子比特的叠加态和纠缠特性,展现出远超经典计算机的计算能力。本文从基本概念、发展历程、应用场景及未来挑战四个方面,全面介绍量子计算从理论到实践的跨越,展望其在优化问题、量子化学、机器学习等领域的广泛应用前景。
|
人工智能
天梯赛-L1-064 估值一亿的AI核心代码 (20 分)--2019全国CCCC天梯赛L1题解
天梯赛-L1-064 估值一亿的AI核心代码 (20 分)--2019全国CCCC天梯赛L1题解
569 0
|
网络协议 网络架构
NAT 原理与实验操作
NAT 原理与实验操作
|
JavaScript 应用服务中间件 API
Node.js搭建REST API实战:从基础到部署
【7月更文挑战第18天】通过以上步骤,你可以将你的Node.js REST API从开发环境顺利迁移到生产环境,并利用各种工具和技术来确保应用的稳定性、安全性和可扩展性。
|
Python
接上python如何处理下载中断的情况
实现断点续传机制涉及记录已下载的字节数、使用`Range`头继续下载及合并文件块。Python示例代码展示了如何通过`requests`库从上次中断的位置开始下载,将新内容追加到现有文件。函数`resume_download(url, filename, last_byte=0)`接收URL、文件名和最后字节位置作为参数。注意,实际使用时需确保URL和文件路径有效。
425 0
|
存储 JSON JavaScript
「Python系列」Python JSON数据解析
在Python中解析JSON数据通常使用`json`模块。`json`模块提供了将JSON格式的数据转换为Python对象(如列表、字典等)以及将Python对象转换为JSON格式的数据的方法。
318 0

热门文章

最新文章