我正在解析一个线程论坛(与parent_id连接的树),我试图在保持层次结构的同时存储ElasticSearch中的单个帖子。然而,我不太确定最好的方法是什么。
父/子模型:这里的困难是,根元素没有父元素+我不确定我是否可以将_parent
指向它自己的类型。
这也是一个额外的问题。插入时,是否需要将父节点作为查询参数传递,或者也可以将其添加到数据对象中?
嵌套模型:我不能提前告诉树可能有多深,我真的不把无用的对象放在映射
我觉得这不是一个不寻常的任务,所以任何建议将是伟大的!
我不建议采用你的方法。
使用父/子和嵌套,你必须预先定义树的最大深度,并通过一些讨厌的映射来表达。(同时在搜索查询中列举每个级别的字段)使用parent/child,您实际上会为每个级别创建额外的索引,这增加了不必要的资源开销。
Elasticsearch是你的主要数据源吗?如果没有,可以考虑简单地将论坛帖子作为文档的平面集合进行索引,其中包含足够的信息,以便能够从您的主线程中重建线程。例如:
文章
- 线程ID
- 作者ID (可能不需要搜索?)
- Post ID
- 父ID (可能不需要搜索?)
- 发布日期
- 文章标题
- Post身体
然后Elasticsearch被简化为文本搜索/高亮显示引擎的角色,并且会很高兴地返回片段和Post id/Thread id,需要从数据库中重建线程。
如果Elasticsearch 是你的主存储,那么希望你已经阅读了这个线程。Siren Solutions创建了一个商业Elasticsearch插件,它使Elasticsearch能够管理像您这样的真正无模式嵌套的数据。