在ElasticSearch中存储一个线程视图



我正在解析一个线程论坛(与parent_id连接的树),我试图在保持层次结构的同时存储ElasticSearch中的单个帖子。然而,我不太确定最好的方法是什么。

父/子模型:这里的困难是,根元素没有父元素+我不确定我是否可以将_parent指向它自己的类型。

这也是一个额外的问题。插入时,是否需要将父节点作为查询参数传递,或者也可以将其添加到数据对象中?

嵌套模型:我不能提前告诉树可能有多深,我真的不把无用的对象放在映射

我觉得这不是一个不寻常的任务,所以任何建议将是伟大的!

我不建议采用你的方法。

使用父/子嵌套,你必须预先定义树的最大深度,并通过一些讨厌的映射来表达。(同时在搜索查询中列举每个级别的字段)

使用parent/child,您实际上会为每个级别创建额外的索引,这增加了不必要的资源开销。

Elasticsearch是你的主要数据源吗?如果没有,可以考虑简单地将论坛帖子作为文档的平面集合进行索引,其中包含足够的信息,以便能够从您的主线程中重建线程。例如:

文章

  • 线程ID
  • 作者ID (可能不需要搜索?)
  • Post ID
  • 父ID (可能不需要搜索?)
  • 发布日期
  • 文章标题
  • Post身体

然后Elasticsearch被简化为文本搜索/高亮显示引擎的角色,并且会很高兴地返回片段和Post id/Thread id,需要从数据库中重建线程。

如果Elasticsearch 你的主存储,那么希望你已经阅读了这个线程。Siren Solutions创建了一个商业Elasticsearch插件,它使Elasticsearch能够管理像您这样的真正无模式嵌套的数据。

最新更新