在elasticsearch中存储关系数据有哪些选项?我知道以下方法
1.嵌套对象:-我不想以嵌套格式存储数据,因为我想更新一个文档而不更改另一个文档,如果我使用嵌套对象,则父文档中的子数据将重复。
1.父子:-我不想在单个索引中存储数据,但要使用父子数据,需要在一个索引(不同类型)中存在。我知道在https://github.com/elastic/elasticsearch/issues/15613问题中提到的未来版本中将删除此限制,但我希望解决方案应与5.5版本一起工作。
除了上述方法外,还有其他方法吗?
3条答案
按热度按时间nwo49xxi1#
下面是带有嵌入嵌套类型文档"child"的父子嵌套类型文档的结构。
Map如下所示:
在RDMS中,这两个实体(父实体、子实体)是两个不同的表,在父实体-〉子实体之间具有一对多关系。父实体的id是子实体行的外键。(两个表的id都必须是)
现在在Elasticsearch中,要索引父文档,我们必须有id来索引它,在本例中是parent_id。索引父文档查询(parent_id是我所说的id,并索引id(_id)= 1的文档):
现在,将子项添加到父项。为此,您将需要子文档,该文档应具有子项ID和父项ID。要添加子项,父项ID必须为。下面是添加新子项或更新现有子项的更新查询。
来吧,干杯!
如果你还需要什么就告诉我。
vof42yt12#
还有两种方法:Denormalization和running multiple queries for joins。
反规范化会占用更多的空间并增加写入时间,但您只需要运行一个查询来检索数据,因此读取时间会得到改善。由于您不想将数据存储在单个索引中,因此联接可能会帮助您解决这个问题。
xurqigkl3#
有四种机制可用于提供关系数据建模支持。每种机制都有其优缺点,因此它们适用于不同的情况......下面是总结:
内部对象
嵌套
父/子
反规格化
如需了解更多信息,请访问:https://www.elastic.co/blog/managing-relations-inside-elasticsearch