• Elasticsearch之mapping



    1、 官方文档地址
    2、 字段类型

    1、定义:映射是定义文档及其包含的字段如何存储和索引的过程。
    2、每个文档都是字段的集合,每个字段都有自己的数据类型。
    3、在映射数据时,可以创建一个映射定义,其中包含与文档相关的字段列表
    4、映射定义还包括元数据字段,如_source字段,它自定义如何处理文档的关联元数据。
    5、可以使用动态映射显式映射这两种方式来定义数据。

    以显式的方式创建一个映射

    显式映射允许您精确地选择如何定义映射,例如:

    • 哪些字符串字段应被视为全文字段。
    • 哪些字段包含数字、日期或位置。
    • 日期值的格式。
    • 自定义规则来控制动态添加字段的映射。

    显式的创建映射;即在还没有向索引中添加数据之前就通过定义自定义的映射将其创建

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

    在这里插入图片描述

    查看某个具体索引的mapping定义

    GET index_name/_mapping

    GET bank/_mapping
    
    • 1

    可以看到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"  }     
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    现在想在对其添加一个新的属性employee_id,该怎么操作呢?如下图中的代码片段所示

    PUT /my-index-000001/_mapping
    {
      "properties": {
        "employee-id": {
          "type": "keyword",
          "index": false
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述
    其中"index": false表示当前字段不能被索引;这个index和type一样都叫 mapping parameters,这里是官方文档的入口

    查看映射中指定字段的定义信息

    比如,只想查看my-index-000001中的employee_id字段的定义信息,可以使用以下命令

    GET /my-index-000001/_mapping/field/employee-id
    
    • 1

    该API响应的结果如下:

    {
      "my-index-000001" : {
        "mappings" : {
          "employee-id" : {
            "full_name" : "employee-id",
            "mapping" : {
              "employee-id" : {
                "type" : "keyword",
                "index" : false
              }
            }
          }
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    更新已存在映射的某个字段

    该小节只进行简单的记录,具体操作阅读官方文档寻找对应的解决方案

    官方明确说明:除了支持的映射参数外,您不能更改现有字段的映射或字段类型。更改现有字段可能会使已经索引的数据无效;如果需要更改索引中字段的映射,请创建具有正确映射的新索引,并将数据重新索引到该索引中。

    • 不能在已存在的映射上直接修改
    • 重新定义一个正确的映射
    • 使用reindex将数据迁移

    官方在这里提到了一个名词 reindx ,这也是更新映射中某个字段的具体解决办法

  • 相关阅读:
    关于数据迁移,测试应该做什么?
    VNC Viewer方式的远程连接树莓派
    微信小程序开发六(自定义组件)
    假如面试官问你Babel的原理该怎么回答
    《机械设计基础》题库
    面试突击65:为什么要用HTTPS?它有什么优点?
    ubuntu 系统解决GitHub无法访问问题
    【每日一问】手机如何开启USB调试?
    基于STM32和人工智能的智能气象站系统
    java计算机毕业设计ssm宠物店管理系统(源码+系统+mysql数据库+Lw文档)
  • 原文地址:https://blog.csdn.net/weixin_43859011/article/details/134020099