我需要使用ElasticSearch创建一个系统。
每个用户都有自己的文档,这些文档的范围仅在其用户范围内。任何其他系统用户都无法访问任何用户文档。
问题是,最好的方法是什么,为每个用户创建一个索引,或者创建一个包含每个用户的所有文档的索引。
每个用户可能在其文档上拥有其他用户没有的自定义元信息字段。
我知道一般情况下建议使用带有用户别名的单个索引,但是我不明白如何在这个大索引中添加这个自定义用户的文档元信息。
例如,假设userA有两个索引的文档,而userB有3个文档。在我的系统中存在系统预定义的元信息作为文件名和描述,但是,系统允许每个用户定义每个自己的自定义元信息,例如:userA可能在其文档上具有元信息颜色,而userB可能在每个文档上都有一个大小的元信息字段。
我理解一个可能性是在单个索引上添加新字段,但是,它可能超出范围。
什么是最好的方法?
谢谢大家。
答案 0 :(得分:2)
每个用户的一个索引听起来就像你在某些时候遇到了麻烦 - 每个索引有一个开销,一旦你有很多用户(比如10000左右)就会变得很重要
我认为你不需要这个 - 你可以通过使用嵌套字段在每个用户的基础上允许自定义属性 - 每个嵌套对象都有名称和值属性(可能有多个值属性),因此你可以任意搜索文档的元数据,无需每次都更改映射。
答案 1 :(得分:0)
好的,谢谢Frederick。
然而,与弹性搜索索引结构相关的另一个问题是关于在何处以及如何分配我的类型的问题。
例如: 我可以有5种类型:type1,type2,type3 ......所有这些都是相关的(非规范化方式)。其中一个将有大量的文件。
在这种情况下,最佳做法是什么:创建两个索引,一个用于小型集合,另一个用于大型集合?
谢谢大家。