概念
索引映射(Index Mapping)是用来定义文档的数据结构和字段类型的过程。它类似于数据库中的表结构定义,为每个字段指定数据类型、分析器和其他属性。索引映射在创建索引时指定,也可以在索引已经存在的情况下进行更新。
目的
索引映射的目的是告诉 Elasticsearch 如何解析和处理文档中的字段数据,以便它能够正确地进行搜索、聚合和排序等操作。如果不定义映射,Elasticsearch 会尝试自动推断字段类型,但这可能会导致意外的结果和不必要的资源浪费。
映射的内容
- 字段类型(Field Type):指定字段的数据类型,如文本、数字、日期、布尔值等。
- 分析器(Analyzer):用于处理文本字段的分析器。分析器负责将文本拆分成词项(Terms),以便进行全文搜索。
- 是否索引(Indexing):指定字段是否应该被索引,允许字段进行搜索。对于某些字段,可能不需要索引,例如用于存储大量纯文本数据的字段。
- 是否存储(Stored):指定字段是否应该被存储在索引中。存储字段可以在检索结果中返回原始值,但会增加索引的存储空间。
- 动态映射(Dynamic Mapping):允许 Elasticsearch 自动推断未在映射中定义的字段的数据类型。
- 嵌套对象(Nested Object):允许在文档中嵌套其他文档或对象。
- 复杂字段类型(Complex Field Types):如数组、对象和地理位置等。
简单使用
在dev tools执行如下代码将会创建一个索引并设置了静态mapping
创建索引与mapping
代码语言:javascript复制PUT lglbc_demo
{
"settings": {
"number_of_replicas": 1,
"number_of_shards": 3
},
"mappings": {
"properties": {
"userId":{
"type": "text"
},
"stuNo":{
"type": "integer"
}
}
}
}
获取mapping
代码语言:javascript复制get lglbc_demo/_mapping
返回结果
代码语言:javascript复制{
"lglbc_demo": {
"mappings": {
"properties": {
"stuNo": {
"type": "integer"
},
"userId": {
"type": "text"
}
}
}
}
}