什么是 Elasticsearch 的 Mapping 映射?如何定义映射?
什么是 Elasticsearch 的 Mapping 映射?如何定义映射?
回答重点
Mapping 映射在 Elasticsearch 中相当于定义索引的模式(schema)。通过映射,你可以明确地指定某个字段的类型,以及如何存储和索引这个字段的数据。在没有手动定义映射的情况下,Elasticsearch 会根据数据本身的格式进行猜测和推断自动生成映射。
要定义映射,通常通过在创建索引时指定映射或者在现有索引中添加/更新映射来完成。下面是一个通过 REST API 定义映射的基本例子:
1 | PUT /my_index |
在这个例子中,我们创建了一个名为 my_index 的索引,并为其字段 name、age 和 email 分别定义了类型 text、integer 和 keyword。
扩展知识
1) 数据类型:
Elasticsearch 支持多种数据类型,包括基本数据类型(如 string、integer、float 等)和复杂数据类型(如 object、nested、geo_point 等)。了解这些类型可以帮助你更好地定义映射,并优化搜索性能。
2) 动态 vs. 静态映射:
如果你不想手动定义每个字段的映射,可以利用 Elasticsearch 的动态映射功能。动态映射会自动根据插入的数据类型生成映射。虽然这很方便,但在某些情况下,明确地定义映射可以避免不必要的错误和性能问题。
3) 自定义属性:
你可以为字段定义一些自定义属性,如 index (是否索引)、store (是否单独存储)和 boost (权重),以达到更精细的控制效果。例如:
1 | { |
4) 映射更新:
需要注意的是,映射一旦定义后,在 Elasticsearch 中是不可变的。因此,如果需要对现有映射进行修改,你往往需要创建新的索引,定义新的映射,并将数据重新索引。
5) 模板 (Template) :
在某些场景下,为一类索引(而非单个索引)定义映射是更为高效的做法。Elasticsearch 提供了索引模板(Index Template)功能,可以为符合特定模式的索引自动应用预定义的映射和设置。
定义索引模板的例子:
1 | PUT _index_template/my_template |
这个模板会自动应用到所有名称匹配 log-* 模式的索引上。