Lucene 删除所有记录中的字段及其内容,并使用新映射重新创建该字段
我有一个字段Lucene 删除所有记录中的字段及其内容,并使用新映射重新创建该字段,lucene,elasticsearch,Lucene,elasticsearch,我有一个字段field10,它是在我更新索引中的特定记录时意外创建的。我想从索引中删除此字段及其所有内容,并使用以下映射重新创建它: "mytype":{ "properties":{ "field10":{ "type":"string", "index":"not_analyzed", "include_in_all":"false", "null_value":"null" } } } 当我尝试
field10
,它是在我更新索引中的特定记录时意外创建的。我想从索引中删除此字段及其所有内容,并使用以下映射重新创建它:
"mytype":{
"properties":{
"field10":{
"type":"string",
"index":"not_analyzed",
"include_in_all":"false",
"null_value":"null"
}
}
}
当我尝试使用Put映射API创建此映射时,我得到一个错误:{“error”:“MergeMappingException[Merge failed with failures{[mapper[field10]具有不同的索引值,mapper[field10]具有不同的索引\分析器,mapper[field10]具有不同的搜索\分析器]}],“status”:400}
如何更改此字段的映射?我不想仅仅为了这个小事故而重新索引数百万条记录
谢谢,您不能删除单个字段并重新创建它。 你不能仅仅修改一个映射,然后让所有的东西都自动重新建立索引。假设您不存储源代码。Elasticsearch如何知道您的数据在被索引之前的样子 但是,您可能可以使用带有
field10.field10
的多字段和带有新分析器的field10.new
来修改映射
如果不重新编制索引,则只有新文档才会在field10.new
中包含内容。
如果要管理旧文档,必须:
- 再次发送您的所有文档(它将更新所有内容)-又名reindex(您可以使用扫描和滚动API获取旧文档)
- 尝试使用
curl -XPOST localhost:9200/crunchbase/person/1/_update -d '{
"script" : "ctx._source.field10 = ctx._source.field10"
}'
但是,正如您所看到的,您必须逐个文档运行它,我认为这比使用批量API重新编制所有索引需要更多的时间
有帮助吗