我正在解析一个线程论坛(带有parent_id连接的树),并且我试图在保留层次结构的同时将单个帖子存储在ElasticSearch中。但是我不太确定最好的方法是什么。
父母/子女模式:这里的难点是,根元素没有父母+我不确定我是否可以将_parent
指向自己类型。
这也是一个额外的问题。插入时,是否需要将父项作为查询参数传递,还是可以将其添加到数据对象中?
嵌套模型:我无法预先知道这棵树有多深,而且我真的不想在映射中放置无用的对象
我觉得这不是一项不常见的任务,所以任何建议都会很棒!
答案 0 :(得分:1)
我不建议为此目的采取你的方法。
同时使用父/子和嵌套,您必须预先定义树的最大深度,并用一些讨厌的映射表达。 (在查询搜索查询中的每个级别的字段时。)
使用父/子,您实际上会为每个级别创建其他索引,这会增加不必要的资源开销。
Elasticsearch是您的主要数据源吗?如果没有,请考虑简单地将论坛帖子索引为具有足够信息的文档的平面集合,以便能够从主要文件重构线程。 E.g:
发表强>
然后Elasticsearch被简化为文本搜索/突出显示引擎的角色,并且很乐意为您提供从数据库重建线程所需的回传片段和帖子ID /线程ID。
如果Elasticsearch 是您的主要商店,那么希望you've read this thread已经存在。有一个由Siren Solutions创建的商业Elasticsearch插件,它使Elasticsearch能够像您一样管理真正无模式的嵌套数据。