【发布时间】:2014-08-06 12:53:10
【问题描述】:
我正在开发一个由 Elasticsearch 索引的文档可以显示在多个列表中的系统。
列表名称:
- 列表1
- 列表2
- 列表3
- 列表4
被索引的文档:
{ title : 'Title' }
我每秒收到一次这样的文件。一个文档可以出现在多个列表中(一些业务逻辑也决定了该文档属于哪个列表)。我目前的方法是将列表数据附加到文档中,使文档看起来像这样:
{ title : 'Title', lists : ['LIST2', 'LIST4'] }
这种方法使我能够通过简单地查询列表数组包含 LIST2 的文档来列出 LIST2 中的所有文档。它还使我能够在 LIST2 中搜索文档。
客户提出了一个新要求,即 LISTS 必须是可合并的。这意味着用户可以将 LIST3 合并到 LIST2 中,这实质上意味着:
- 更新所有附有 LIST3 列表的文档并将其更改为 LIST2
- 删除 LIST2。
我的问题:在 Elasticsearch 中有没有更好的方法来处理这个问题?这种方法的可扩展性如何?我认为的问题领域可能是:
- 未来会有很多 LISTS(可能是一百万)。帖子所属的 LISTS 越多,文档列表数组就越大。 Elasticsearch 在这个部门的表现如何?
- 合并列表似乎是一项非常昂贵的操作。
【问题讨论】:
-
一个示例文档(json)会更有帮助。
-
我还有很多字段,但我已经去掉了它们。这是文档的稍微简化的版本:gist.github.com/peeter-tomberg/b285f900095cd89563bf watchlists 是文档所在的列表(mongo ID)数组。
-
还有,合并是如何发生的?在您的文档中?
-
目前我们“手动”进行。我们在“列表”中查询所有包含 LIST3 的文档,并将它们全部更新为包含 LIST2。
标签: database-design elasticsearch