我将ES索引迁移到ES版本6中。由于ES6删除了“ _type”字段上的using,因此我坚持不懈。
我的软件有许多用户(> 100K)。每个用户在ES中至少有一个文档。因此,层次结构如下所示:
INDEX -> TYPE -> Document
myindex-> user-123 -> document-1
这里的关键在于这种结构,我可以轻松删除特定用户的所有文档。
DELETE /myindex/user-123
(使用单个命令删除特定用户的所有文档)
ES6不再支持“ _type”。
将索引名称用作_type
,而不是使用USER-ID
。所以我的索引看起来像:
"user-123" -> "static-name" -> document
删除用户是通过删除索引完成的(而不是先前实现中的删除type
)。
任何其他提示都将受到欢迎! 谢谢。
答案 0 :(得分:1)
我不会为每个用户提供一个索引,这会浪费资源,尤其是如果每个用户只有10个文档。
我要做的是使用filtered aliases,每个用户一个。
因此索引将被命名为users
,并且类型将是静态名称,例如doc
。对于用户123,该用户的文档将全部存储在users/doc/xyz
中,并且您需要在每个文档中添加用户ID,例如
PUT users/doc/xyz
{
...
"userId": 123,
...
}
然后,您可以为用户123的所有文档定义过滤的别名,如下所示:
POST /_aliases
{
"actions" : [
{
"add" : {
"index" : "users",
"alias" : "user-123",
"filter" : { "term" : { "userId" : "123" } }
}
}
]
}
如果您需要删除用户123的所有文档,则只需执行以下操作:
POST user-123/_delete_by_query?q=*
答案 1 :(得分:0)
拥有这么多索引绝对不是一个好方法。如果您只关心用一个命令删除多个文档。然后,您可以使用ElasticSearch提供的Delete by Query API
您可以在所有文档中引入“ subtype”属性,其中包含每个文档的值,例如“ user-”值。因此,在您的情况下,文档看起来像这样。
{
"attribute1":"value",
"subtype":"user-123"
}