1.什么是Mapping映射?
映射:创建索引的时候,可以预先定义字段的类型及相关属性
作用:这样会让索引建立的更加的细致和完善
分类:静态映射和动态映射
Type | ES type | Description |
String,Varchar,Text | string | 文本类型 |
Integer | integer | 整型 |
Long | long | 长整型 |
Float | float | 浮点型 |
Double | double | 双精度浮点型 |
Boolean | boolean | 布尔型 |
Date/Datetime | date | 日期类型 |
Bytes/Binary | binary | 字节型 |
2.映射的属性方法
除了定义字段的类型,还可以给字段添加相关的属性
属性 | 描述 | 适用类型 |
store | 值为:yes或者no,设为yes就是存储,no就是不存储,默认值是no | all |
index | 值为:analyzed,not_analyzed或者no analyzed索引且分析 not_analyzed索引但不分析 no 不索引这个字段,这样就搜索不到 默认值是analyzed |
string(其他类型只能设置为no或not_analyzed) |
null_value | 如果字段是空值,通过它可以设置一个默认值,比如“null_value”:"NA" | all |
boost | 设置字段的权值,默认值是1.0 | all |
index_analyzer | 设置一个索引时用的分析器 | all |
search_analyzer | 设置一个搜索时用的分析器 | all |
analyzer | 可以设置索引和搜索时用的分析器,默认下elasticsearch使用的是standard分析器,除此之外,你还可以使用whitespace,simple,english这三种内置的分析器 | all |
include_in_all | 默认下elasticsearch会为每一个文档定义一个特殊的域_all,它的作用就是每一个字段都将被搜索到,如果你不想让某个字段被搜索到,那么久在这字段里定义一个include_in_all=false,默认值是true | all |
index_name | 定义字段的名称;默认值是字段本身的名字 | all |
norms | norms的作用是根据各种规范化因素去计算权值,这样方便查询,在analyzed定义字段里,默认值是true,not_analyzed是false | all |
3.动态映射
3.1什么是动态映射?
文档中碰到一个以前没见过的字段时,动态映射可以自动决定该字段的类型,并对该字段添加映射。
3.2如何配置动态映射?
通过dynamic属性进行控制
true:默认值,动态添加字段;false:忽略新字段;strict:碰到陌生字段,跑出异常
3.3使用范围?
适用在根对象上或者object类型的任意字段上
案例:
1).建立映射
POST /library
{
"settings":{
"number_of_shards":5,
"number_of_replicas":1
},
"mappings":{
"books":{
"properties":{
"title":{"type":"string"},
"name":{"type":"string","index":"not_analyzed"},
"publish_date":{"type":"date","index":"not_analyzed"},
"price":{"type":"double"},
"number":{"type":"integer"}
}
}
}
}
2).动态映射
PUT /library
{
"mappings":{
"books":{
"dynamic":"strict",
"properties":{
"title":{"type":"string"},
"name":{"type":"string","index":"not_analyzed"},
"publish_date":{"type":"date","index":"not_analyzed"},
"price":{"type":"double"},
"number":{"type":"object","dynamic":true}
}
}
}
}
4. 管理映射
4.1获取映射信息
1)获取某个索引的映射信息
GET /library/_mapping
2)获取某个索引下某个type的映射信息
GET /library/_mapping/books
3)获取这个集群内所有的映射的信息
GET /_all/_mapping
4)获取这个集群内某两个或者多个type的映射信息
GET /_all/_mapping/books,bank_account
4.2更新映射信息
更新修改mapping映射
很遗憾,mapping一旦建立,就不能修改现有的字段映射
如果要推倒现有的映射,就得重新建立一个索引,然后重新定义映射
然后把之前的索引里的数据导入到新建立的映射里面
方法步骤:
1)给现有的索引定义一个别名,并且把现有的索引指向这个别名,运行步骤2
2)运行:PUT /现有索引/_alias/别名A
3)新创建一个索引,定义好最新的映射
4)将别名指向新的索引,并且取消之前索引的指向,运行步骤5
5)运行:
POST _aliases
{
"actions": [
{
"remove": {
"index": "现有索引名",
"alias": "别名A"
},
"add": {
"index": "新建索引名",
"alias": "别名A"
}
}
]
}
4.3删除映射信息
3种方式供使用
DELETE /library/books
DELETE /library/books/_mapping
DELETE /library/_mapping/books,bank