04 ES中的映射Mapping

Mapping映射其实就是指数据的结构(类似于表结构)

注意: ES中的映射Mapping只能新增字段,不能修改/删除映射下的任何字段或类型.这是硬性
规定.

常见的数据类型

字符串

  • text : 当一个字段是要被全文搜索的,比如Email内容、产品描述,应该使用text
    类型。设置text类型以后,字段内容会被分析,在生成倒排索引以前,字符串会被分
    析器分成一个一个词项。text类型的字段不用于排序,很少用于聚合。

  • keyword: keyword类型适用于索引结构化的字段,比如email地址、主机名、
    状态码和标签。如果字段需要进行过滤(比如查找已发布博客中status属性为
    published的文章)、排序、聚合。keyword类型的字段只能通过精确值搜索到。

数值型

  • 整型: byte,short,integer,long
  • 浮点型: float, half_float, scaled_float,double

日期类型

  • date

format。通过format设置日期格式,常见的可以设置成年月
日时分秒、年月日及毫秒值三种格式。

ignore_malformed。默认值false。如果为true,则忽略格式
错误的数字。如果为false(默认值),则格式错误的数字将引发异
常并拒绝整个文档。

null_value。默认是null。接受采用配置格式之一的日期值作
为该字段,以替换任何显式的空值。默认为null,这意味着该字段
被视为丢失。

{
 "properties": {
 "birthday": {
 "type": "date",
 "format": "yyyy‐MM‐dd HH:mm:ss||yyyy‐MM‐dd||epoch_millis",
 "ignore_malformed": false,
 "null_value": null
 }
 }

范围型

  • integer_range, long_range, float_range,double_range,date_range

布尔 boolean :

true、false

⼆进制 binary :

会把值当做经过 base64 编码的字符串,默认不存储,且不可搜索

复杂数据类型(不建议使用)

  • object 对象
  • 数组

专用数据类型IP

实现Mapping映射的新增

  1. 先新建一个Mapping映射
    如:

POST/PUT http://localhost:9200/itest/_mapping

{
  "properties": {
    "jid": {
      "type": "long"
    },
    "title": {
      "type": "text"
    },
    "salary": {
      "type": "integer_range"
    },
    "city": {
      "type": "keyword"
    },
    "description": {
      "type": "text"
    }
  }
}

返回结果

{
    "acknowledged": true
}
  1. 在原有的Mapping上,新增一个属性,继续提交

如果有,则不变,如果原来没有,则进行新增

POST/PUT http://localhost:9200/itest/_mapping

{
  "properties": {
    "name": {
      "type": "text"
    }
  }
}

返回结果

{
    "acknowledged": true
}

注:再次提交时,如果比原来少了Mapping时,是不会有变更的

获取现有的映射

获取指定索引下的映射

GET http://localhost:9200/itest/_mapping

{
    "itest": {
        "mappings": {
            "properties": {
                "city": {
                    "type": "keyword"
                },
                "description": {
                    "type": "text"
                },
                "jid": {
                    "type": "long"
                },
                "name": {
                    "type": "text"
                },
                "salary": {
                    "type": "integer_range"
                },
                "title": {
                    "type": "text"
                }
            }
        }
    }
}

获取所有已有的映射信息

已有映射字段的修改调整?

  1. 创建一个全新的索引(index),映射包含调整后的字段或类型 #job #job2
  2. 将原有索引下的数据迁移(reindex)到新的索引 #job reindex-> #job2
  3. 删除原有索引 #DELETE job
  4. 将新的索引的别名(alias)设置原有索引相同名称 #job2 alias-> job
    ES警示: ES的前期字段设计很重要,尤其是对名称和类型进行规划,避免出现重命名的情况
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容