文章目录
- 以显式的方式创建一个映射
- 查看某个具体索引的mapping定义
- 向已存在的映射中添加一个新的属性
- 查看映射中指定字段的定义信息
- 更新已存在映射的某个字段
1、 官方文档地址
2、 字段类型
1、
定义
:映射是定义文档及其包含的字段如何存储和索引的过程。
2、每个文档都是字段的集合,每个字段都有自己的数据类型。
3、在映射数据时,可以创建一个映射定义,其中包含与文档相关的字段列表
4、映射定义还包括元数据字段,如_source字段,它自定义如何处理文档的关联元数据。
5、可以使用动态映射
和显式映射
这两种方式来定义数据。
以显式的方式创建一个映射
显式映射允许您精确地选择如何定义映射,例如:
- 哪些字符串字段应被视为全文字段。
- 哪些字段包含数字、日期或位置。
- 日期值的格式。
- 自定义规则来控制动态添加字段的映射。
显式的创建映射;即在还没有向索引中添加数据之前就通过定义自定义的映射将其创建
PUT /my-index-000001
{
"mappings": {
"properties": {
"age": { "type": "integer" },
"email": { "type": "keyword" },
"name": { "type": "text" }
}
}
}
查看某个具体索引的mapping定义
GET index_name/_mapping
GET bank/_mapping
可以看到mapping中定义的字段类型,其中account_number是long类型、address字段是全文检索,并且它还定义了下面的keyword属性是个keyword类型,即不可分词。这也很好的解释了address.keyword
为什么是精确匹配
向已存在的映射中添加一个新的属性
之前使用已经为my-index-000001
这个索引定义好映射信息了,如下
PUT /my-index-000001
{
"mappings": {
"properties": {
"age": { "type": "integer" },
"email": { "type": "keyword" },
"name": { "type": "text" }
}
}
}
现在想在对其添加一个新的属性employee_id
,该怎么操作呢?如下图中的代码片段所示
PUT /my-index-000001/_mapping
{
"properties": {
"employee-id": {
"type": "keyword",
"index": false
}
}
}
其中"index": false
表示当前字段不能被索引;这个index和type一样都叫 mapping parameters
,这里是官方文档的入口
查看映射中指定字段的定义信息
比如,只想查看my-index-000001
中的employee_id
字段的定义信息,可以使用以下命令
GET /my-index-000001/_mapping/field/employee-id
该API响应的结果如下:
{
"my-index-000001" : {
"mappings" : {
"employee-id" : {
"full_name" : "employee-id",
"mapping" : {
"employee-id" : {
"type" : "keyword",
"index" : false
}
}
}
}
}
}
更新已存在映射的某个字段
该小节只进行简单的记录,具体操作阅读官方文档寻找对应的解决方案
官方明确说明:除了支持的映射参数外,您不能更改现有字段的映射或字段类型。更改现有字段可能会使已经索引的数据无效;如果需要更改索引中字段的映射,请创建具有正确映射的新索引,并将数据重新索引到该索引中。
- 不能在已存在的映射上直接修改
- 重新定义一个正确的映射
- 使用
reindex
将数据迁移
官方在这里提到了一个名词 reindx ,这也是更新映射中某个字段的具体解决办法