第 7 章 复杂形态:关系、嵌套与空间数据


文档摘要

第 7 章 · 复杂形态:关系、嵌套与空间数据 章节摘要:不是所有文档都孤身旅行:工单带着回复数组、商品挂着变体规格、门店背着经纬度。本章处理两种复杂形态——对象数组的关系保全(object 会拍平、nested 独立建索引、join 走父子文档)与地理数据的检索(geopoint 存坐标、距离与边界两种问法)。这一章是第 1 章数据模型的进阶篇:形态选错,查询就会说谎。 学习目标 阅读完本章,你应当能够: 复现"object 数组拍平导致跨对象误匹配"的翻车现场,解释拍平的存储机理。 用 nested 类型保全数组内对象的独立性,写出 nested 查询与嵌套聚合,并说明它的索引代价。 说明父子文档(join 字段)与 nested 的三点差别,按更新频率选型。

第 7 章 · 复杂形态:关系、嵌套与空间数据

章节摘要:不是所有文档都孤身旅行:工单带着回复数组、商品挂着变体规格、门店背着经纬度。本章处理两种复杂形态——对象数组的关系保全(object 会拍平、nested 独立建索引、join 走父子文档)与地理数据的检索(geo_point 存坐标、距离与边界两种问法)。这一章是第 1 章数据模型的进阶篇:形态选错,查询就会说谎。

学习目标

阅读完本章,你应当能够:

  1. 复现"object 数组拍平导致跨对象误匹配"的翻车现场,解释拍平的存储机理。
  2. 用 nested 类型保全数组内对象的独立性,写出 nested 查询与嵌套聚合,并说明它的索引代价。
  3. 说明父子文档(join 字段)与 nested 的三点差别,按更新频率选型。
  4. 用 geo_point 建坐标字段,写出距离检索与边界框检索两种请求。
  5. 给地理字段配聚合(按距离分桶、按网格分格),支撑"附近的服务网点"类产品功能。

核心概念速览

金句:引擎只对它理解的结构负责——你给它拍平的数组,它就还你拍平的答案。

子章节导航

7.1 对象数组的陷阱:nested 与父子文档

三个回合讲清关系建模:object 默认拍平引发的"张冠李戴";nested 如何把每个子对象变成独立小文档;更新频繁时改用 join 父子文档。附一次选型推演的完整过程。

7.2 地理数据:带坐标的文档如何旅行

geo_point 的两种录入形态、距离检索与边界框检索的写法、地理聚合的两种桶。末尾简短巡礼反向搜索与跨集群检索这些"冷门但关键"的能力,作为高级特性的地图边界。

子章节之间的逻辑关系

两节分别处理"关系复杂"与"空间复杂",都是第 1 章文档模型的延伸形态。7.1 的选型框架(按更新频率与查询模式)同样适用于 7.2 的地理建模(点、形状、网格的粒度选择),方法论一以贯之:先想清楚查询形态,再决定存储形态。

7.1 关系形态 object/nested/join ──► 7.2 空间形态 geo_point │ │ └─► 第3章 映射决定一切 └─► 第9章 附近网点功能落地

本章考核清单

考核点 达标标准 对应小节
复现拍平陷阱 构造对象数组数据,演示 object 跨对象误匹配的查询 7.1
nested 查询 写出锁定子文档内匹配的查询,并用 inner_hits 取回命中项 7.1
三选项选型 按更新频率与查询模式在 object、nested、join 间选择并说明代价 7.1
距离检索 写出 geo_point 映射与三公里圈查询,配距离排序 7.2
地理聚合 按距离环带分桶统计网点覆盖 7.2

易错点速查

  • 经纬度顺序写反:对象形态纬度在前,字符串与数组形态经度在前,混用形态是距离全错的头号原因。
  • nested 数组无界增长:每条子对象都是隐藏文档,回复数百条的工单让索引与查询双双虚胖。
  • 期待 geo_point 反查行政区:归属类关系应在写入端预计算成普通字段,引擎擅长算距离不擅长判归属。

前置知识与后续延伸

  • 前置知识:第 1 章的文档模型与反范式取舍;第 3 章的映射登记(nested 与 geo_point 都是映射级决定);第 5 章的 bool 组合(nested 查询套在 bool 里)。
  • 后续延伸:7.1 的选型框架在第 9 章案例的商品检索里再次应用;7.2 的地理能力支撑案例里的网点匹配;章节末尾巡礼的反向搜索适合告警订阅场景,值得记住入口。

作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U