介绍
我正在使用 Elastic Search (v5.x) 并尝试通过查询删除文档。
我的索引称为“数据”。文档以分层结构存储。以这种模式构建的文档 URL:
https://server.ip/data/ {userid}/{document-id}
因此,假设用户 ID“1”存储了两个文档(“1”、“2”)。因此,他们的直接 URL 将是:
https://server.ip/data/1/1
https://server.ip/data/1/2
目标
现在,我要做的是从系统中删除用户(用户及其存储的文档)。
对我有用的唯一方法是为每个文档 URL 发送 HTTP DELETE 请求。像这样:
DELETE https://server.ip/data/1/1
DELETE https://server.ip/data/1/2
这是有效的。但是,在这个解决方案中,我必须多次调用 delete。我想在一次通话中删除所有文档。因此,该解决方案被拒绝。
我的第一次尝试是发送 HTTP DELETE 请求到
不幸的是,它不起作用(错误代码 400)。
我的第二次尝试是使用该_delete_by_query
功能。我存储的每个文档都UserId
包含包含 UserId 的字段。因此,我尝试进行删除查询以删除“数据”索引中包含值为 1 ('UserId'==1) 的字段的所有文档
POST https://server.ip/data/_delete_by_query
{
"query":{
"match":{
"UserId":"1"
}
}
}
这也行不通。响应是带有以下正文的 HTTP 错误代码 400:
{
"error":{
"root_cause":[
{
"type":"invalid_type_name_exception",
"reason":"Document mapping type name can't start with '_'"
}
],
"type":"invalid_type_name_exception",
"reason":"Document mapping type name can't start with '_'"
},
"status":400
}
你知道如何解决这些问题吗?也许你有替代解决方案?
谢谢!