zl程序教程

您现在的位置是:首页 >  工具

当前栏目

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

ES文档elasticsearch 处理 嵌套 父子 nested 第五
2023-09-11 14:16:28 时间

Elasticsearch中如何处理关联关系

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

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

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

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

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

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

对象类型

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

PUT /user_index
{
  "mappings": {
    "properties": {
      "user_name": {