在 ElasticSearch 中存储线程视图
Store a threaded view in ElasticSearch
我正在解析一个线程论坛(具有 parent_id 连接的树)并试图在保持层次结构的同时将单个帖子存储在 ElasticSearch 中。但是我不太确定最好的方法是什么。
parent/child模型:这里的难点在于,根元素没有父元素+我不确定我是否可以指向_parent
到它自己的类型。
这也是一个额外的问题。插入时,我是否需要将父级作为查询参数传递,或者我也可以将其添加到数据对象中吗?
嵌套模型:我无法提前判断树可能有多深,而且我真的不想将 无用 对象放入映射
我觉得这不是一项不常见的任务,所以任何建议都很好!
我不建议为此目的采用您的方法。
同时使用 parent/child 和 nested 你将不得不 pre-define 你的树的最大深度,并用一些令人讨厌的映射来表达这一点。 (在您的搜索查询中枚举每个级别的字段。)
使用 parent/child 您实际上会为每个级别创建额外的索引,这会增加不必要的资源开销。
Elasticsearch 是您的主要数据源吗?如果没有,请考虑将论坛帖子简单地索引为一个平面 collection 文档,其中包含足够的信息,以便能够从您的主要文档中重建线程。例如:
POST
- 线程 ID
- 作者 ID (搜索可能不需要?)
- Post ID
- Parent ID (搜索可能不需要?)
- Post 日期
- Post 标题
- Post Body
然后 Elasticsearch 被简化为文本搜索/突出显示引擎的角色,并且会很乐意为您返回片段和 Post IDs/Thread 从数据库中重建线程所需的 ID。
如果 Elasticsearch 是 您的主要存储,那么希望 you've read this thread already. There is a commercial Elasticsearch plugin created by Siren Solutions 使 Elasticsearch 能够像您一样管理真正无模式的嵌套数据。
我正在解析一个线程论坛(具有 parent_id 连接的树)并试图在保持层次结构的同时将单个帖子存储在 ElasticSearch 中。但是我不太确定最好的方法是什么。
parent/child模型:这里的难点在于,根元素没有父元素+我不确定我是否可以指向_parent
到它自己的类型。
这也是一个额外的问题。插入时,我是否需要将父级作为查询参数传递,或者我也可以将其添加到数据对象中吗?
嵌套模型:我无法提前判断树可能有多深,而且我真的不想将 无用 对象放入映射
我觉得这不是一项不常见的任务,所以任何建议都很好!
我不建议为此目的采用您的方法。
同时使用 parent/child 和 nested 你将不得不 pre-define 你的树的最大深度,并用一些令人讨厌的映射来表达这一点。 (在您的搜索查询中枚举每个级别的字段。)
使用 parent/child 您实际上会为每个级别创建额外的索引,这会增加不必要的资源开销。
Elasticsearch 是您的主要数据源吗?如果没有,请考虑将论坛帖子简单地索引为一个平面 collection 文档,其中包含足够的信息,以便能够从您的主要文档中重建线程。例如:
POST
- 线程 ID
- 作者 ID (搜索可能不需要?)
- Post ID
- Parent ID (搜索可能不需要?)
- Post 日期
- Post 标题
- Post Body
然后 Elasticsearch 被简化为文本搜索/突出显示引擎的角色,并且会很乐意为您返回片段和 Post IDs/Thread 从数据库中重建线程所需的 ID。
如果 Elasticsearch 是 您的主要存储,那么希望 you've read this thread already. There is a commercial Elasticsearch plugin created by Siren Solutions 使 Elasticsearch 能够像您一样管理真正无模式的嵌套数据。