在Elasticsearch 7.3中,mapping映射扮演着至关重要的角色,它是对索引内部文档结构的定义。映射决定了索引中每种字段的数据类型、如何进行分析(analysis)、是否能被搜索、排序和聚合等属性。以下是映射入门的关键点:
-
创建映射:
- 在Elasticsearch中,当向一个新的索引中添加第一个文档时,Elasticsearch会自动检测文档的字段类型,并为该索引创建一个默认的映射(dynamic mapping)。然而,为了更好地控制索引中的字段行为,通常推荐在创建索引之前或者创建索引后立即定义映射。
示例:
PUT /my_index { "mappings": { "properties": { "title": { "type": "text" }, "content": { "type": "text" }, "date": { "type": "date" }, "views": { "type": "integer" } } } }
-
字段类型:
- 映射中的每个字段都有一个特定的数据类型,例如
text
、keyword
、date
、integer
、float
、boolean
等。不同类型影响了字段如何被索引、搜索和存储。
- 映射中的每个字段都有一个特定的数据类型,例如
-
分析器(Analyzer):
- 对于
text
类型的字段,可以配置分析器决定如何对文本进行分词(tokenization)和过滤(filtering)。例如,可以使用标准分析器(standard analyzer)对英文进行分词,或者自定义分析器处理特殊需求。
示例:
"title": { "type": "text", "analyzer": "standard" }
- 对于
-
动态映射(Dynamic Mapping):
- 如果没有预先定义映射,Elasticsearch可以根据插入的文档自动推断字段类型。但也可以限制动态映射,比如禁用某些字段的动态创建,或为动态字段指定默认映射规则。
-
多字段(Multi-fields):
- 同一字段可以有多个映射,以便在不同场景下有不同的处理方式。例如,一个
title
字段既可以作为全文搜索的text
类型,也可以作为一个不分词的keyword
类型供聚合或精确匹配使用。
示例:
"title": { "type": "text", "fields": { "keyword": { "type": "keyword" } } }
- 同一字段可以有多个映射,以便在不同场景下有不同的处理方式。例如,一个
-
其他映射属性:
- 映射还可以定义诸如
null_value
(为null值设置一个替代值)、ignore_above
(超过一定长度的字段不被索引)、copy_to
(将字段内容复制到另一个字段)等属性。
- 映射还可以定义诸如
总的来说,理解并合理配置映射对于构建高性能、高效率的Elasticsearch索引至关重要。它能够确保你的数据在搜索、排序和聚合过程中得到正确处理,同时优化存储空间和查询性能。