我想知道拥有数千个不同的索引是否是个坏主意?
我正在基于 ElasticSearch 向我的网络应用程序添加一个搜索页面。搜索页面允许用户通过过滤许多不同的索引标准(姓名、位置、性别等)来搜索网站上的其他用户。这是相当直接的,并且只需要一个索引,其中包含每个站点用户的文档。
但是,我还想创建一个页面,用户可以在其中查看他们关注的所有其他用户的列表。我希望此页面具有与搜索页面相同的过滤选项。我想知道解决这个问题的好方法是否是为每个用户创建一个单独的索引,其中包含他们关注的每个用户的文档?
我想知道拥有数千个不同的索引是否是个坏主意?
我正在基于 ElasticSearch 向我的网络应用程序添加一个搜索页面。搜索页面允许用户通过过滤许多不同的索引标准(姓名、位置、性别等)来搜索网站上的其他用户。这是相当直接的,并且只需要一个索引,其中包含每个站点用户的文档。
但是,我还想创建一个页面,用户可以在其中查看他们关注的所有其他用户的列表。我希望此页面具有与搜索页面相同的过滤选项。我想知道解决这个问题的好方法是否是为每个用户创建一个单独的索引,其中包含他们关注的每个用户的文档?
虽然您当然可以在 elasticsearch 中创建数以千计的索引,但我并不认为在您的用例中需要它。我认为您可以使用一个索引。只需为主用户记录创建一个额外的子类型 followers
。每次用户A
关注用户B
时,创建一个B
具有以下内容的子记录:{"followed_by" : "A"}
. 要获取当前用户关注的用户列表,您可以简单地将Has Child Filter添加到您的查询中。
我想补充一下 Igor 的回答,即在一个小集群(一个或两个节点)上创建数千个索引可能会导致一些缺点。索引的每个分片都是一个完整的 Lucene 实例。也就是说,如果您有一个节点(或一个小集群 - 就节点而言),您将有许多打开的文件(可能打开的文件太多)。
这是我不会定义太多索引的主要原因之一......
另请参阅安装指南上的文件描述符