我有一个字段field10
,当我更新索引中的特定记录时,它是偶然创建的。我想从索引中删除此字段及其所有内容,并使用以下映射重新创建它:
"mytype":{
"properties":{
"field10":{
"type":"string",
"index":"not_analyzed",
"include_in_all":"false",
"null_value":"null"
}
}
}
当我尝试使用Put Mapping API创建此映射时,出现错误:{"error":"MergeMappingException[Merge failed with failures {[mapper [field10] has different index values, mapper [field10] has different index_analyzer, mapper [field10] has different search_analyzer]}]","status":400}
。
如何更改此字段的映射?我不想仅为这场小事故重新索引数百万条记录。
由于
答案 0 :(得分:1)
AFAIK,您无法删除单个字段并重新创建它。
你既不能修改映射,也不能自动重构索引。想象一下,你不存储_source
。在索引数据之前,Elasticsearch如何知道您的数据是什么样的?
但是,您可以使用带有field10.field10
的多字段使用旧映射修改映射,使用新分析器修改field10.new
。
如果您不重新索引,则只有新文档会在field10.new
中包含内容。
如果要管理旧文档,则必须:
您可以尝试运行如下查询:
curl -XPOST localhost:9200/crunchbase/person/1/_update -d '{
"script" : "ctx._source.field10 = ctx._source.field10"
}'
但是,正如您所看到的,您必须逐个文档运行它,我认为使用Bulk API重新编制索引需要更多的时间。
有帮助吗?