为什么要删除映射类型?
最初,我们谈到“索引”类似于 SQL 数据库中的“数据库”,而“类型”等同于“表”。
这是一个糟糕的类比,导致了错误的假设。在 SQL 数据库中,表是相互独立的。一个表中的列与另一表中同名的列没有关系。对于映射类型中的字段,情况并非如此。
在 Elasticsearch 索引中,不同映射类型中具有相同名称的字段在内部由相同的 Lucene 字段支持。换句话说,使用上面的例子,user
类型中的 user_name
字段与 tweet
类型中的 user_name
字段存储在完全相同的字段中,并且两个 user_name
字段在两种类型中必须具有相同的映射(定义)。
例如,当您希望删除为同一索引中的一种类型的日期字段和另一种类型的布尔字段时,这可能就无法支持。
最重要的是,在同一索引中存储具有很少或没有共同字段的不同实体会导致数据稀疏并干扰 Lucene 有效压缩文档的能力。
由于这些原因,我们决定从 Elasticsearch 中删除映射类型的概念。
具体的可以参考官方说明:Removal of mapping types