1、Mapping设置
Mapping设置API _mapping ,允许增加新的字段到指定索引中,或在满足一定的条件下修改已经存在的字段,需要使用PUT方法。
1.1 增加新的字段到索引中
增加一个new_name到已经存在的索引new_index中,操作如下:
PUT /new_index/_mapping { "properties":{ "phone_number": { "type": "keyword" } } } |
响应:
{ "acknowledged" : true } |
表示操作成功,可以通过前面学的GET方法查看字段是否被成功到索引中。
1.2 增加字段到多个索引中
如果涉及到要增加相同字段的索引较多,Elasticsearch同时往多个索引中增加相同的字段,以下示例同时在new_index和new_index_2中增加字段,操作如下:
PUT /new_index,new_index_2/_mapping { "properties":{ "phone_number": { "type": "keyword" } } } |
响应:
{ "acknowledged" : true } |
表示操作成功。
1.3 更新索引中的字段
通常情况下,索引中的已经存在的字段是不可以被更新的,如果字段要被更新,须满足以下的条件:
- 被修改的字段为Object数据类型字段,可以为其增加新的属性;
- 可以将新的多字段添加到现有字段中;
- 字段的ignore_above(指长度超过ignore_above配置值的字符串,不会被索引或存储)参数值可以被更新;
1.4 操作示例
1)先建立一个索引update_field_test,通过mapping指定其中的address字段是Object数据类型、指定name字段为keyword类型,如下所示:
PUT /update_field_test { "mappings": { "properties": { "address": { "properties": { "home_address": { "type": "text" } } }, "name": { "type": "keyword" } } } } |
2)修改address字段,在其中增加company_address字段,并同时修改name字段的ignore_above属性,操作如下:
PUT /update_field_test/_mapping { "properties": { "address": { "properties": { "company_address": { "type": "text" } } }, "name": { "type": "keyword", "ignore_above": 200 } } } |
3)通过GET方法查看字段是否被成功加入和修改:
GET /update_field_test { "update_field_test" : { "aliases" : { }, "mappings" : { "properties" : { "address" : { "properties" : { "company_address" : { "type" : "text" }, "home_address" : { "type" : "text" } } }, "name" : { "type" : "keyword", "ignore_above" : 200 } } }, ...//省略其它的 } |
可以看到新的字段company_address已经成功加入了,name的ignore_above属性也被更新了。
2. 查看mapping
1)查看单个索引的mapping,如下所示:
GET /update_field_test/_mapping |
2)也可以同时查看多个索引的mapping,索引之间与英文逗号“,”做分隔,如下所示:
GET /update_field_test,new_index/_mapping |
每个索引的mapping都会归属到该索引下,返回的结构如下:
{ "new_index" : { "mappings" : { "properties" : { ... } } }, "update_field_test" : { "mappings" : { "properties" : { ... } } } } |
3)查看所有索引的mapping,如下所示:
GET /_all/_mapping #或 GET /_mapping |
返回的结构和上面返回多个mapping的结构是相同的。
4)查看索引中指定字段的mapping,如下所示:
GET /update_field_test/_mapping/field/name |
5)查看多个索引中多个字段的mapping,多个索引和多个字段,都以英文逗号“,”做为分隔符,如下所示:
GET /update_field_test,new_index/_mapping/field/name,name1 |
响应:
{ "new_index" : { "mappings" : { } }, "update_field_test" : { "mappings" : { "name" : { "full_name" : "name", "mapping" : { "name" : { "type" : "keyword", "ignore_above" : 200 } } } } } } |
New_index没有字段name和name1,update_field_test中有字段name但没有name1,根据响应可以看出,如果字段不存在,则不显示mapping结果,存在则显示,这里不会报错。