一、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://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