Elasticsearch 面试题
目录

Elasticsearch 的映射 (Mapping) 是什么?

· 约 3 分钟读完 · 第 21 / 142 章

推荐答案

Elasticsearch 的映射(Mapping)是定义索引中字段的类型、格式和结构的方式。它类似于关系型数据库中的表结构定义,决定了文档中的每个字段如何被存储和索引。映射可以显式定义,也可以由 Elasticsearch 自动推断。

映射的主要作用包括:

  1. 定义字段的数据类型(如 text、keyword、date、integer 等)。
  2. 控制字段的索引行为(如是否被索引、是否存储原始值)。
  3. 定义字段的分析器(如分词器、过滤器)。
  4. 设置字段的格式(如日期格式)。

本题详细解读

1. 映射的作用

映射是 Elasticsearch 中非常重要的概念,它决定了文档中的字段如何被处理。如果没有显式定义映射,Elasticsearch 会根据文档内容自动推断字段类型,但这种推断可能不符合实际需求。因此,显式定义映射可以确保数据的准确性和一致性。

2. 映射的类型

Elasticsearch 支持多种字段类型,常见的包括:

  • text:用于全文搜索的字符串类型,会被分词。
  • keyword:用于精确匹配的字符串类型,不会被分词。
  • date:用于存储日期和时间。
  • integer、long、float、double:用于存储数值类型。
  • boolean:用于存储布尔值。
  • object:用于嵌套 JSON 对象。
  • nested:用于存储数组中的复杂对象。

3. 动态映射与显式映射

  • 动态映射:当索引新文档时,Elasticsearch 会自动推断字段类型并创建映射。例如,如果字段值是字符串,Elasticsearch 可能会将其映射为 text 类型。
  • 显式映射:通过 API 或索引模板显式定义字段的类型和属性。显式映射可以更精确地控制字段的行为。

4. 映射的创建与更新

  • 创建映射:在创建索引时,可以通过 mappings 参数定义映射。
  • 更新映射:已存在的字段映射不能直接修改,但可以通过添加新字段或使用 reindex API 来间接更新映射。

5. 映射的常见配置

  • index:控制字段是否被索引。设置为 false 时,字段不会被搜索。
  • store:控制字段是否存储原始值。默认情况下,Elasticsearch 只存储索引后的数据。
  • analyzer:指定用于文本字段的分词器。
  • format:用于定义日期字段的格式,如 yyyy-MM-dd。

6. 映射的注意事项

  • 映射一旦创建,字段的类型不能更改。如果需要修改字段类型,通常需要重新创建索引并迁移数据。
  • 动态映射可能会导致字段类型不一致,建议在生产环境中使用显式映射。
  • 映射的设计会影响查询性能,因此需要根据实际需求合理规划字段类型和配置。