我正在尝试更改索引的映射,但是收到错误。以下是我创建索引的步骤
使用以下代码设置映射:
PUT /myidx/orderrow/_mapping
{
"orderrow": {
"properties": {
"item_code": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
这是我收到的错误消息:
{
"error": "MergeMappingException[Merge failed with failures {[mapper [item_code] has different index values, mapper [item_code] has different `norms.enabled` values, mapper [item_code] has different tokenize values, mapper [item_code] has different index_analyzer]}]",
"status": 400
}
有什么想法吗?
答案 0 :(得分:31)
由于您首先将数据编入索引,因此Elasticsearch会根据加载的数据自动检测item_code
字段的字段类型/映射。然后,当您尝试更新映射时,您将收到上面显示的错误。
我建议在运行Python脚本之前创建索引并应用映射以填充索引。
PUT /myproj/
PUT /myproj/orderrow/_mapping
{
"orderrow": {
"properties": {
"item_code": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
或者,您可以使用merging & conflicts section of the Put Mapping API Documentation中定义的ignore_conflicts
选项将冲突映射强制转换为索引。但是,我不确定这将如何影响已编入索引的文档。
答案 1 :(得分:3)
我遇到了同样的问题并解决了删除映射并创建它的问题(警告:使用该映射删除映射删除所有文档(行))
DELETE /myidx/orderrow/_mapping
PUT /myidx/orderrow/_mapping -d '
...
'
之后,我不得不关闭并打开索引:
POST /myidx/_close
POST /myidx/_open