2012-09-24 38 views
2

我想知道是否有数千个不同的索引是一个坏主意?ElasticSearch单独索引每个用户

我正在将搜索页面添加到基于ElasticSearch的Web应用程序中。搜索页面允许用户通过筛选多个不同的索引标准(名称,位置,性别等)来搜索网站上的其他用户。这是非常简单的,只需要一个包含文档中每个用户的文档的索引。

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

回答

5

虽然你当然可以在elasticsearch中创建数千个索引,但在你的用例中我并不真正看到它的需要。我认为你可以使用一个索引。只需为主要用户记录创建一个额外的child typefollowers。每当用户A跟随用户B时,创建B的子记录以及以下内容:{"followed_by" : "A"}。要获取当前用户所关注的用户列表,您可以简单地将Has Child Filter添加到您的查询中。

5

我想添加到伊戈尔的答案,在一个小群集(一个或两个节点)上创建数千个索引可能会导致一些缺陷。 索引的每个分片都是完整的Lucene实例。也就是说,如果您拥有单个节点(或小型集群 - 就节点而言),您将拥有许多已打开的文件(可能打开的文件太多)。

这就是为什么我不会定义了太多的指数的重要原因之一...

File descriptors on installation guide

+2

优秀点见!如果David还没有说服你,我还可以补充说,有很多索引会减慢集群的重新启动速度,重复用户数据会使修改和删除用户记录更加复杂。换句话说,你可以有很多索引,但就你而言,这可能是一个坏主意。 – imotov