elasticsearch Flattened 使用

server/2024/12/21 17:50:01/

在 Elasticsearch 中,flattened 类型是一种特别设计的字段类型,用于存储具有不规则结构的 JSON 数据。与 nested 类型不同,flattened 类型将嵌套的 JSON 对象展平(即将嵌套对象的字段变成一级字段,字段名以“点”分隔)。这种类型适用于存储字段数量和结构变化较大的数据,并且支持高效的查询。

使用Flattened类型可以将整个JSON对象及其Nested字段索引为单个关键字(keyword类型)字段,以此减少字段总数。

1. 创建索引并定义 Flattened 类型

与嵌套类型不同,flattened 类型是用于存储具有复杂、变化字段的结构。它将复杂对象展平,允许更灵活的查询和存储。

示例:创建索引并定义 flattened 类型字段
PUT /products
{"mappings": {"properties": {"name": {"type": "text"},"price": {"type": "float"},"attributes": {"type": "flattened"  // 使用 flattened 类型}}}
}

在此示例中,attributes 字段是一个 flattened 类型,可以存储任意复杂的 JSON 对象。

2. 增加文档(Indexing)

在增加文档时,你可以直接传入一个包含嵌套结构的 JSON 数据,Elasticsearch 会自动将其“展平”。

示例:向 products 索引添加文档
POST /products/_doc/1
{"name": "Laptop","price": 1200.99,"attributes": {"color": "black","screen_size": "15 inches","brand": "BrandX","specs.cpu": "Intel i7","specs.ram": "16GB"}
}

在这个示例中,attributes 字段包含了一些简单的键值对和一个嵌套的对象(specs),这些内容都会被展平为一个扁平的结构。

3. 查询文档(Search)

flattened 类型字段的查询方式与普通字段类似,使用 matchterm 或其他查询类型。

查询包含特定属性的文档

假设我们想查找所有具有 specs.cpu 属性且值为 “Intel i7” 的文档:

POST /products/_search
{"query": {"match": {"attributes.specs.cpu": "Intel i7"}}
}
查询特定属性(如 color)的文档
POST /products/_search
{"query": {"term": {"attributes.color": "black"}}
}
使用聚合进行查询

你还可以在 flattened 类型字段上执行聚合操作,进行统计或分组。

POST /products/_search
{"aggs": {"attribute_colors": {"terms": {"field": "attributes.color"}}}
}

4. 更新文档(Update)

更新 flattened 类型的字段与普通字段的更新方式相似。在更新时,你可以通过脚本来修改或添加新的展平字段。

示例:更新 attributes 字段

假设我们想要更新文档中的 color 属性,将其改为 “silver”:

POST /products/_update/1
{"doc": {"attributes":{"color": "silver"}}
}

如果想要在 attributes 中添加一个新的键值对(例如 specs.gpu):

POST /products/_update/1
{"doc": {"attributes":{"specs.gpu": "NVIDIA GTX 1650"}}
}

5. 删除文档(Delete)

删除文档的操作与普通的删除操作相同。flattened 类型字段并不影响删除操作。

DELETE /products/_doc/1

6. 删除字段(Partial Delete)

如果你只想从 flattened 字段中删除某个字段,可以使用脚本来实现。

示例:删除 attributes.specs.cpu 字段
POST /products/_update/1
{"script": {"source": "ctx._source.attributes.remove('specs.cpu')"}
}

总结

在 Elasticsearch 中,flattened 类型字段非常适合存储结构化和非结构化的数据,它将嵌套的数据展平成平面结构,并可以通过简单的键值对来访问。在增、删、改、查操作上,flattened 类型非常灵活:

  • 增(Indexing):直接将复杂的 JSON 对象存入字段,Elasticsearch 会自动展平。
  • 查(Search):通过常规查询语法查询展平后的字段。
  • 改(Update):可以通过 doc 语法更新或添加新的字段。
  • 删(Delete):可以删除整个文档或通过脚本删除字段。

http://www.ppmy.cn/server/152002.html

相关文章

智能座舱进阶-应用框架层-Handler分析

首先明确, handler是为了解决单进程内的线程之间的通信问题的。我也需要理解Android系统中进程和线程的概念, APP启动后,会有三四个线程启动起来,其中,有一条mainUITread的线程,专门用来处理UI事件&#xf…

HC04,HC05,HC06,HC08蓝牙模块可替换产品的优势

还在为找不到HC04、HC05、HC06和HC08蓝牙模块而烦恼吗? 美迅物联网MesoonRF-工业物联网无线通信专家,拥有一支超过10年经验的蓝牙WiFi研发团队,拥有当前流行的蓝牙模块的替换升级方案,HC04、HC05、HC06和HC08蓝牙模块是倍受大家欢…

数字IC后端设计实现篇之TSMC 12nm TCD cell(Dummy TCD Cell)应该怎么加?

TSMC 12nm A72项目我们需要按照foundary的要求提前在floorplan阶段加好TCD Cell。这个cell是用来做工艺校准的。这个dummy TCD Cell也可以等后续Calibre 插dummy自动插。但咱们项目要求提前在floorplan阶段就先预先规划好位置。 TSCM12nm 1P9M的metal stack结构图如下图所示。…

[创业之路-200]:什么是business(业务)?B2B, B2C, B2G业务, 什么是业务设计?

目录 一、基本概念 1、基础定义 2、构成要素 3、业务流程 4、业务范围 5、语境中的含义 六、常见的业务类型 1、按行业分类 2、按运营模式分类 3、按业务性质分类 4、其他分类方式 三、B2B, B2C, B2G业务 1、B2B(Business-to-Business) 2、…

中国电信网络下多方通话 SIP消息交互记录

如下表格记录了一个日志中,在中国电信网络下多方语音通话 发起方的 SIP消息交互记录,省略部分SIP消息,记录下和多方通话的重要SIP消息。 progress1:发起方A通过拨号盘呼叫B 此操作建立A和B之间的通话,网络会向终端分配QCI=1的专有承载。 同时此专有承载包含四个pkt_filt…

无人机推流直播平台EasyDSS视频技术如何助力冬季森林防火

冬季天干物燥,大风天气频繁,是森林火灾的高发期。相比传统的人力巡查,无人机具有更高的灵敏度和准确性,尤其在夜间或浓雾天气中,依然能有效地监测潜在火源。 无人机可以提供高空视角和实时图像传输,帮助巡…

Midjourney各类型咒语汇总

油画风格 远景 四周是悬崖和海洋 史诗级细节 卡拉瓦乔油画风格 一个年轻男子,背着小包裹,手持一根白色花棍,头戴花环,搭挂小包裹,身边跟着一只小白狗。他站在悬崖边,似乎毫不在意地向前行走,脸上…

力扣-图论-18【算法学习day.68】

前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非…