我试图找出一种方法来删除elasticsearch索引中特定属性的所有条目,并删除该属性的所有类型映射。
我一直在查看以下两个文档页面:put mapping和delete mapping
来自第二个链接:
“允许删除映射(类型)及其数据.REST 端点是/ {index} / {type},带有DELETE方法。“
我认为我需要的是/{index}/{type}/{property}
?
我是否需要重新创建整个索引才能完成此操作,即在类型之间移动和操作数据?
例如,在映射上调用GET:
curl -XGET 'http://.../some_index/some_type/_mapping'
结果:
{
"some_type": {
"properties": {
"propVal1": {
"type": "double",
"index": "analyzed"
},
"propVal2": {
"type": "string",
"analyzer": "keyword"
},
"propVal3": {
"type": "string",
"analyzer": "keyword"
}
}
}
}
此propVal3
上的删除操作将返回:
curl -XGET 'http://.../some_index/some_type/_mapping'
结果:
{
"some_type": {
"properties": {
"propVal1": {
"type": "double",
"index": "analyzed"
},
"propVal2": {
"type": "string",
"analyzer": "keyword"
}
}
}
}
并且propVal3
的所有数据都将通过索引删除。
答案 0 :(得分:15)
你做不到。忘记这个值存在... ;-) 如果您确实需要将其删除,则必须重新索引文档。
答案 1 :(得分:6)
您可以使用新的_reindex
api,甚至可以在运行reindex之前将新的_mapping
输入到dest索引,这样您就可以更改索引中字段的属性。 / p>
要执行重新索引并删除属性,您可以执行以下操作:
POST /_reindex
{
"source": {
"index": "twitter"
},
"dest": {
"index": "new_twitter",
},
"script": {
"inline": "ctx._source.remove('whatever')"
}
}
如果您将此项与_aliases API结合使用,则可以修改索引而不会出现“停机时间”
答案 2 :(得分:4)
目前无法从映射中删除属性。为了从所有记录中删除属性的所有值,您需要重新索引删除此属性的所有记录。