ElasticSearch第五讲 ES nested嵌套文档与父子文档处理

本文详细介绍了Elasticsearch中处理关联关系的方法,包括对象类型、nested对象和父子文档(Parent / Child)关系。nested对象解决了数组查询不准确的问题,但更新成本高;父子文档则提供了Join操作,适合更新频繁的场景,但内存需求较大。文章通过实例展示了各种操作和查询语法。

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

Elasticsearch中如何处理关联关系

在ES中,处理实体之间的关系并不像关系型存储那样明显。在关系数据库中的黄金准则 - 数据规范化,在ES中并不适用。在处理关联关系,嵌套对象和父子关联关系中,我们会讨论几种可行方案的优点和缺点。

紧接着在为可扩展性而设计中,我们会讨论ES提供的一些用来快速灵活实现扩展的特性。对于扩展,并没有一个可以适用于所有场景的解决方案。你需要考虑数据是如何在你的系统中流转的,从而恰当地对你的数据进行建模。针对基于时间的数据比如日志事件或者社交数据流的方案比相对静态的文档集合的方案是十分不同的。

反范式化(Denormalize)的设计不使用关联关系,而是在文档中保存冗余的数据拷贝。

优点: 无需处理Join操作,数据读取性能好。Elasticsearch可以通过压缩_source字段,减少磁盘空间的开销
缺点: 不适合在数据频繁修改的场景。 一条数据的改动,可能会引起很多数据的更新

Elasticsearch并不擅长处理关联关系,一般会采用以下四种方法处理关联:

对象类型
嵌套对象(Nested Object)
父子关联关系(Parent / Child )
应用端关联

对象类型

对象类型:
在每一个用户的文档里都记录用户的住址信息
如果用户的住址信息发生变化,需要修改对应的用户信息

PUT /user_index
{
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员路同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值