【翻译自官方文档】
一开始,我们我们谈到 一个 ES的索引类似于关系型数据库中的数据库,一个映射类型则相当于关系型数据库中的一张表。
这是一个错误的类比,导致了错误的假设。在一个关系型数据库中,表之间是相互独立的。一个表中的列与另一个表中同名的列没有关系。然而在映射类型中却不是这样的。
在一个Elasticsearch的索引中,有相同名称字段的不同映射类型在Lucene内部是由同一个字段支持的。换言之,看下面的这个例子,user 类型中的 user_name字段和tweet类型中的user_name字段实际上是被存储在同一个字段中,而且两个user_name字段在这两种映射类型中都有相同的定义(如类型都是 text或者都是date)。
这会导致一些问题,比如,当你希望在一个索引中的两个映射类型,一个映射类型中的 deleted 字段映射为一个日期数据类型的字段,而在另一个映射类型中的deleted字段映射为一个布尔数据类型的字段,这就会失败。
最重要的是,在一个索引中存储那些有很少或没有相同字段的实体会导致稀疏数据,并且干扰Lucene有效压缩文档的能力。