es mapping

什么是mapping

mapping类似于数据库的schema,表结构,主要作用如下:

  1. 定义索引中字段的名称
  2. 字段的数据类型
  3. 倒排索引相关的配置

mapping会把es中的json文档映射成lucene所需要的扁平格式。

字段类型

  1. 简单类型

    1. Text / Keyword
    2. Date
    3. Integer / Floating
    4. Boolean
    5. IPv4 / IPv6
  2. 复杂类型

    1. 对象类型、嵌套类型
  3. 特殊类型

    1. 地理信息类型

什么是dynamic mapping

在创建索引文档的时候,es会根据文档信息推算出字段的类似(有时候不一定对)。dynamic mapping机制使得我们无需手动定义mapping。

查看mapping:

// create user_info
post user_info/_doc
{
  "name":"asd",
  "birthday":"2020-11-23",
  "address":"china"
}

//get mapping
get /user_info/_mappings

返回mapping如下:

{
  "user_info" : {
    "mappings" : {
      "properties" : {
        "address" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "birthday" : {
          "type" : "date"
        },
        "name" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        }
      }
    }
  }
}

dynamic字段设置

通过dynamic参数来控制字段的新增:

  • true(默认)文档可以正常写入,新增字段可索引
  • false 文档可以正常写入,但无法对新增字段索引(字段不能被用来搜索)
  • strict 文档不能写入,报错

设置脚本:

PUT user_info/_mapping
{
  "dynamic":"true"
}

显式Mapping设置

示例脚本

PUT new_user
{
  "mappings": {
    "properties": {
      "firstName":
      {
        "type": "text"
      },
       "lastName":
      {
        "type": "text"
      },
       "birth":
      {
        "type": "date",
        "index": false
      }
    }
  }
}
posted @ 2021-03-07 23:26  xuan_wu  阅读(186)  评论(0编辑  收藏  举报