elasticsearch,Lucene,elasticsearch" /> elasticsearch,Lucene,elasticsearch" />

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重新编制所有索引需要更多的时间

有帮助吗