【问题标题】:ElasticSearch separate index per user每个用户的 ElasticSearch 单独索引
【发布时间】:2012-09-16 08:06:41
【问题描述】:

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

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

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

【问题讨论】:

    标签: elasticsearch indexing


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      另见File descriptors on installation guide

      【讨论】:

      • 好点!如果 David 还没有说服你,我还可以补充一点,拥有大量索引会减慢集群重启速度,重复用户数据会使用户记录的修改和删除变得更加复杂。换句话说,你可以有很多索引,但在你的情况下,这可能是个坏主意。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-03
      • 1970-01-01
      • 2020-06-14
      • 2021-01-08
      • 1970-01-01
      • 2017-05-02
      • 2013-01-04
      相关资源
      最近更新 更多