什么是 Elasticsearch 的 Mapping 映射?如何定义映射?

Sherwin.Wei Lv8

什么是 Elasticsearch 的 Mapping 映射?如何定义映射?

回答重点

Mapping 映射在 Elasticsearch 中相当于定义索引的模式(schema)。通过映射,你可以明确地指定某个字段的类型,以及如何存储和索引这个字段的数据。在没有手动定义映射的情况下,Elasticsearch 会根据数据本身的格式进行猜测和推断自动生成映射。

要定义映射,通常通过在创建索引时指定映射或者在现有索引中添加/更新映射来完成。下面是一个通过 REST API 定义映射的基本例子:

1
2
3
4
5
6
7
8
9
10
PUT /my_index
{
"mappings": {
"properties": {
"name": { "type": "text" },
"age": { "type": "integer" },
"email": { "type": "keyword" }
}
}
}

在这个例子中,我们创建了一个名为 my_index 的索引,并为其字段 nameageemail 分别定义了类型 textintegerkeyword

扩展知识

1) 数据类型
Elasticsearch 支持多种数据类型,包括基本数据类型(如 string、integer、float 等)和复杂数据类型(如 object、nested、geo_point 等)。了解这些类型可以帮助你更好地定义映射,并优化搜索性能。

2) 动态 vs. 静态映射
如果你不想手动定义每个字段的映射,可以利用 Elasticsearch 的动态映射功能。动态映射会自动根据插入的数据类型生成映射。虽然这很方便,但在某些情况下,明确地定义映射可以避免不必要的错误和性能问题。

3) 自定义属性
你可以为字段定义一些自定义属性,如 index (是否索引)、store (是否单独存储)和 boost (权重),以达到更精细的控制效果。例如:

1
2
3
4
5
6
7
8
9
10
11
12
{
"mappings": {
"properties": {
"description": {
"type": "text",
"index": true,
"store": false,
"boost": 1.0
}
}
}
}

4) 映射更新
需要注意的是,映射一旦定义后,在 Elasticsearch 中是不可变的。因此,如果需要对现有映射进行修改,你往往需要创建新的索引,定义新的映射,并将数据重新索引。

5) 模板 (Template)
在某些场景下,为一类索引(而非单个索引)定义映射是更为高效的做法。Elasticsearch 提供了索引模板(Index Template)功能,可以为符合特定模式的索引自动应用预定义的映射和设置。

定义索引模板的例子:

1
2
3
4
5
6
7
8
9
10
11
PUT _index_template/my_template
{
"index_patterns": ["log-*"],
"template": {
"mappings": {
"properties": {
"timestamp": { "type": "date" }
}
}
}
}

这个模板会自动应用到所有名称匹配 log-* 模式的索引上。

Comments
On this page
什么是 Elasticsearch 的 Mapping 映射?如何定义映射?