如何修复 ElasticSearch 'Root mapping definition has unsupported parameters'
问题:
你想创建具有自定义映射的 ElasticSearch 索引或更新现有 ElasticSearch 索引的映射,但你看到类似这样的错误消息
elasticsearch-error.txt
elasticsearch.exceptions.RequestError: RequestError(400, 'mapper_parsing_exception', 'Root mapping definition has unsupported parameters: [mappings : {properties={num_total={type=integer}, approved={type=integer}, num_translated={type=integer}, pattern_length={type=integer}, num_unapproved={type=integer}, pattern={type=keyword}, num_approved={type=integer}, translated={type=integer}, untranslated={type=integer}, num_untranslated={type=integer}, group={type=keyword}}}]')解决方案
这可能指向多个问题。本质上,ElasticSearch 试图告诉你你的 JSON 结构不正确。
此错误经常被误解为单个字段定义错误,但这很少是问题所在(只有在单个字段定义完全格式不正确时才会出现)。
如果你的消息结构为
mapping-error.txt
... unsupported parameters: [mappings : ...那么最可能的根本原因是你的 JSON 中 mappings 嵌套在 mappings 内。这也适用于更新映射(put_mapping)- 在这种情况下外部的 mapping 是隐式的!
示例: 你的代码如下所示:
put_mapping_bad.py
es.indices.put_mapping(index='my_index, doc_type='_doc', body={
"mappings": {
"properties": {
"pattern": {
"type": "keyword"
}
}
}
})ElasticSearch 将在内部创建类似这样的 JSON:
mapping.json
{
"mappings": {
"mappings": {
"properties": {
"pattern": {
"type": "keyword"
}
}
}
}
}看到有两个 mappings 相互嵌套吗?ElasticSearch 不认为这是正确结构的 JSON,因此你需要从代码中删除 "mapping": {...},结果为
put_mapping_fixed.py
es.indices.put_mapping(index='my_index, doc_type='_doc', body={
"properties": {
"pattern": {
"type": "keyword"
}
}
})Check out similar posts by category:
Databases, ElasticSearch, Python
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow