返回

揭秘 Elasticsearch 7.0.0 删去“映射类型”背后的故事

后端

Elasticsearch 作为一款深受开发者青睐的搜索引擎,以其强大的全文搜索和灵活的数据结构而闻名。然而,在 Elasticsearch 7.0.0 及更高版本中,一个曾经令人习以为常的概念——“映射类型”,却悄然退出了历史舞台。这一举动不禁引人深思:为什么 Elasticsearch 要从新版本中删除映射类型?

映射类型:昨日的辉煌,今日的弃子

映射类型,是指 Elasticsearch 在创建索引时,为每个字段指定的数据类型和存储方式。在 Elasticsearch 6.x 及更低版本中,映射类型是一个强制性的概念,每个字段都必须指定一个映射类型。然而,在 Elasticsearch 7.0.0 中,映射类型却成为了历史。

映射类型之所以被废弃,主要有以下几个原因:

  1. 简单化数据模型: 映射类型的存在,使得 Elasticsearch 的数据模型变得更加复杂和难以理解。在没有映射类型的情况下,Elasticsearch 的数据模型变得更加简洁和直观,更容易为开发者所理解和使用。
  2. 提高查询性能: 映射类型的存在,会在一定程度上影响查询性能。这是因为 Elasticsearch 在执行查询时,需要根据不同的映射类型来确定如何处理数据。在没有映射类型的情况下,Elasticsearch 可以更有效地执行查询,从而提高查询性能。
  3. 消除冗余数据: 在 Elasticsearch 中,每个字段的映射类型都会存储在索引中。这会导致索引变得臃肿,并且会浪费存储空间。在没有映射类型的情况下,Elasticsearch 可以消除这些冗余数据,从而减小索引的大小。

替代方案:动态映射

随着映射类型的废弃,Elasticsearch 引入了动态映射的概念。动态映射是指 Elasticsearch 在创建索引时,会自动根据字段的数据类型和值来创建映射。动态映射具有以下几个优点:

  1. 简化索引创建过程: 无需再为每个字段指定映射类型,从而简化了索引创建过程。
  2. 提高数据灵活性: 动态映射允许数据在索引中自由变化,而无需修改索引结构。
  3. 节省存储空间: 动态映射可以消除冗余数据,从而节省存储空间。

迁移建议

如果您正在使用 Elasticsearch 6.x 或更低版本,并且想要迁移到 Elasticsearch 7.0.0 或更高版本,那么您需要将现有索引中的映射类型转换为动态映射。可以通过以下步骤进行迁移:

  1. 使用 _cat/indices API 找出所有包含映射类型的索引。
  2. 使用 _reindex API 将这些索引重新索引到新的索引中,并使用动态映射。
  3. 删除旧的索引。

结论

Elasticsearch 7.0.0 及更高版本中映射类型的删除,是 Elasticsearch 发展历程中的一次重大变革。这一变革简化了数据模型,提高了查询性能,节省了存储空间,并且提高了数据的灵活性。如果您正在使用 Elasticsearch,那么您应该尽快将您的索引迁移到动态映射,以享受新版本 Elasticsearch 带来的诸多好处。