一、ES7报错
Failed to parse mapping [_doc]: Root mapping definition has unsupported parameters
原因:es7不建议使用type,默认的type未doc,因此默认不支持指定type对应的mapping
解决方法:指定索引类型需修改参数include_type_name
PUT index/_mappings?include_type_name=true
(但es8会弃用type,因此最好不要再使用type啦)
es6中:
"mappings":{
"language": {
"properties": {
"name": {"type": "text"}
}
}
}
而es7:
"mappings":{
"properties": {
"name": {"type": "text"}
}
}
二、关于es7取消type
ES中不同type下名称相同的filed最终在Lucene中的处理方式是一样的,必须在两个不同的type中定义相同的filed映射。否则,不同type中的相同字段名称就会在处理中出现冲突的情况,导致Lucene处理效率下降。
例如在同一个索引people中,有两个类型student和teacher,两个类型中都有一个tel字段,如果student中tel字段定义为text,teacher中tel定义为long,那么在搜索时就会出现冲突。因此同index中存储不同type时应保持同名的filed的类型一致。
且在同一个索引中,存储仅有小部分字段相同或者全部字段都不相同的文档,会导致数据稀疏,影响Lucene有效压缩数据的能力。
参考链接:
https://blog.miuyun.work/archives/16677312
https://github.com/elastic/elasticsearch/pull/37149
https://www.elastic.co/guide/en/elasticsearch/reference/current/removal-of-types.html
https://blog.csdn.net/zjx546391707/article/details/78631394