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映射的新增
- 先新建一个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
}
- 在原有的Mapping上,新增一个属性,继续提交
如果有,则不变,如果原来没有,则进行新增
POST/PUT http://localhost:9200/itest/_mapping
{
"properties": {
"name": {
"type": "text"
}
}
}
返回结果
{
"acknowledged": true
}
注:再次提交时,如果比原来少了Mapping时,是不会有变更的
获取现有的映射
获取指定索引下的映射
{
"itest": {
"mappings": {
"properties": {
"city": {
"type": "keyword"
},
"description": {
"type": "text"
},
"jid": {
"type": "long"
},
"name": {
"type": "text"
},
"salary": {
"type": "integer_range"
},
"title": {
"type": "text"
}
}
}
}
}
获取所有已有的映射信息
已有映射字段的修改调整?
- 创建一个全新的索引(index),映射包含调整后的字段或类型 #job #job2
- 将原有索引下的数据迁移(reindex)到新的索引 #job reindex-> #job2
- 删除原有索引 #DELETE job
- 将新的索引的别名(alias)设置原有索引相同名称 #job2 alias-> job
ES警示: ES的前期字段设计很重要,尤其是对名称和类型进行规划,避免出现重命名的情况