ElasticSearch为每个用户分别编制索引

时间:2012-09-24 20:14:02

标签: elasticsearch indexing

我想知道是否有数千个不同的索引是个坏主意?

我正在基于ElasticSearch向我的网络应用添加搜索页面。搜索页面允许用户通过过滤许多不同的索引标准(名称,位置,性别等)来搜索站点上的其他用户。这是相当简单的,只需要一个索引,其中包含该站点的每个用户的文档。

但是,我还要创建一个页面,用户可以在其中查看他们关注的所有其他用户的列表。我希望此页面具有搜索页面上可用的相同过滤选项。我想知道一个好的方法是为每个用户创建一个单独的索引,包含他们关注的每个用户的文档吗?

2 个答案:

答案 0 :(得分:5)

虽然你可以在elasticsearch中创建数千个索引,但我并不认为在你的用例中需要它。我认为你可以使用一个索引。只需为主用户记录创建一个额外的child type followers即可。用户A每次关注用户B时,都会创建B的子记录,其中包含以下内容:{"followed_by" : "A"}。要获取当前用户关注的用户列表,您只需向查询添加Has Child Filter即可。

答案 1 :(得分:5)

我想补充一下Igor的答案,即在一个小集群(一个或两个节点)上创建数千个索引会导致一些缺点。 索引的每个分片都是一个完整的Lucene实例。也就是说,如果您有一个节点(或一个小型集群 - 在节点方面),您将拥有许多已打开的文件(可能打开的文件太多)。

这是我不能定义太多索引的主要原因之一......

另见File descriptors on installation guide