在 Elasticsearch 中,映射类型 和字段数据类型 是核心概念,它们定义了数据在索引中如何被索引、存储 和查询。理解这些概念对于我们有效地构建数据模型和优化搜索性能至关重要。
在这篇文章中,我们将学习映射类型、字段数据类型及其在 Elasticsearch 中的重要意义。同时,我们也将通过一些示例来加深理解。
映射类型简介
- 在早期版本的 Elasticsearch(6.x 版本之前)中,映射类型 是在索引 内组织数据的一种方式。
- 通过映射类型,我们可以在单个索引 中定义多种类型,每种类型代表不同的实体或文档结构。
- 映射类型允许我们为索引中的文档定义模式。例如,我们可以在同一个索引中拥有一个“book”(书籍)类型和一个“movie”(电影)类型。
- 从 Elasticsearch 的后续版本开始,映射类型已被视为过时,并将在未来版本中移除。
- Elasticsearch 现在建议不再使用映射类型,而是每个索引仅使用单一类型。
- 摒弃映射类型使得模式设计更加灵活,减少了映射 冲突并提高了效率。
- 在较新版本的 Elasticsearch 中,建议使用不同的索引来代表不同的实体或文档结构。
- 每个索引可以拥有自己的映射,以定义该索引中文档的模式。
字段数据类型定义了文档中某个字段可以存储的数据类型。Elasticsearch 提供了广泛的数据类型来容纳各种类型的数据,包括文本、数字、日期等。让我们探索一下 Elasticsearch 中一些常见的字段数据类型:
1. 文本
- 它用于全文搜索。文本字段会被分析,这意味着它们会被分解为单独的词项,然后被索引。这允许进行高效的全文搜索,但可能会导致索引大小增加。
2. 关键词
- 它用于精确匹配。关键词字段不会被分析,而是按原样被索引。它们适用于像ID、电子邮件地址 和枚举 值这样的字段。
3. 整数
- 它用于数值。Elasticsearch 支持多种数字类型,包括整数、长整型、浮点型和双精度型。数字字段的索引方式支持高效的范围查询 和聚合。
4. 长整型
- 长整型数据类型与整数类似,但适用于更大 的数字。
5. 日期
- 它用于日期 和时间 值。Elasticsearch 可以解析多种日期格式,并支持查询中的日期运算 和格式化。
6. 布尔值
- 布尔数据类型用于包含真 或假 值的字段。
7. 浮点型和双精度型
- 浮点型 和双精度型 数据类型用于包含浮点数 的字段。
映射类型与字段定义
让我们创建一个包含各种字段数据类型 映射的简单索引,以了解 Elasticsearch 中的映射和字段数据类型是如何工作的。
PUT /my_index
{
"mappings": {
"properties": {
"title": {
"type": "text"
},
"category": {
"type": "keyword"
},
"quantity": {
"type": "integer"
},
"price": {
"type": "float"
},
"is_active": {
"type": "boolean"
},
"created_at": {
"type": "date"
}
}
}
}
解释:
- 我们创建了一个名为 myindex 的索引,其中包含 title、category、quantity、price、isactive 和 created_at 等字段的映射。
- 每个字段都被分配了特定的数据类型(text、keyword、integer、float、boolean、date)。
使用字段数据类型索引文档
假设我们需要将一个文档索引到 my_index 索引中,以演示 Elasticsearch 中字段数据类型的应用。
POST /my_index/_doc/1
{
"title": "Product A",
"category": "Electronics",
"quantity": 100,
"price": 49.99,
"is_active": true,
"created_at": "2022-05-01T12:00:00"
}
解释: 在这个示例中,我们使用 INLINECODEffa579ea 请求将一个包含各种字段数据类型的文档索引到 INLINECODE303652f4 索引中。文档中的每个字段都对应于 Elasticsearch 中的特定字段数据类型,例如文本、关键词、整数、浮点数、布尔值 和日期。
获取映射信息
假设我们想要检索 my_index 索引的映射信息,以了解字段数据类型在 Elasticsearch 中是如何映射的。
GET /my_index/_mapping
示例输出:
“`
{
"my_index": {
"mappings": {