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

nly*_*lyn 2 indexing elasticsearch

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

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

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

imo*_*tov 5

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


dad*_*net 5

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

这是我不定义太多指数的主要原因之一......

另请参阅安装指南中的文件描述符

  • 优点!如果David还没有说服你,我还可以补充说,拥有大量索引会减慢群集重启速度,重复用户数据会使修改和删除用户记录变得更加复杂.换句话说,你可以有很多指数,但在你的情况下,它可能是一个坏主意. (2认同)