| 知乎专栏 |
curl -XGET http://localhost:9200/information/news/_mapping?pretty
数据结构如下
{
"information" : {
"mappings" : {
"news" : {
"_all" : {
"analyzer" : "ik_max_word"
},
"properties" : {
"content" : {
"type" : "string",
"boost" : 8.0,
"term_vector" : "with_positions_offsets",
"analyzer" : "ik_max_word",
"include_in_all" : true
},
"ctime" : {
"type" : "string"
},
"division_category_id" : {
"type" : "long"
},
"tag" : {
"type" : "string",
"boost" : 8.0,
"term_vector" : "with_positions_offsets",
"analyzer" : "ik_max_word",
"include_in_all" : true
},
"title" : {
"type" : "string",
"boost" : 8.0,
"term_vector" : "with_positions_offsets",
"analyzer" : "ik_max_word",
"include_in_all" : true
}
}
}
}
}
}
curl -XPOST http://localhost:9200/information/news/_mapping?pretty -d'
{
"news": {
"_all": {
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word",
"term_vector": "no",
"store": "false"
},
"properties": {
"content": {
"type": "string",
"store": "no",
"term_vector": "with_positions_offsets",
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word",
"include_in_all": "true",
"boost": 8
}
}
}
}'
注意:更新只能用于空的index,如果index中存在数据无法修改_mapping,必须重建,或者采用别名方案
更新已存在的 mapping,首先我们创建一个 _mapping
% curl "http://localhost:9200/information/article/_mapping?pretty"
{
"information" : {
"mappings" : {
"article" : {
"properties" : {
"content" : {
"type" : "text",
"analyzer" : "ik_max_word"
},
"title" : {
"type" : "text",
"analyzer" : "ik_max_word"
}
}
}
}
}
}
在这个 _mapping 中增加 ctime 字段,定义时间格式为 yyyy-MM-dd HH:mm:ss
% curl -XPOST http://localhost:9200/information/article/_mapping -d'
{
"properties": {
"ctime": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss"
}
}
}'
查看预期结果
% curl "http://localhost:9200/information/article/_mapping?pretty"
{
"information" : {
"mappings" : {
"article" : {
"properties" : {
"content" : {
"type" : "text",
"analyzer" : "ik_max_word"
},
"ctime" : {
"type" : "date",
"format" : "yyyy-MM-dd HH:mm:ss"
},
"title" : {
"type" : "text",
"analyzer" : "ik_max_word"
}
}
}
}
}
}
修改流程需要经历五步,首先创建新索引,创建新_mapping,导入数据,索引别名,删除旧索引。
当然你也可以删除重建索引,为什么会这么折腾呢?因为这样不用停止业务的情况下进行迁移。
# curl -XGET http://localhost:9200/information_v1/news/_mapping?pretty
{
"information_v1" : {
"mappings" : {
"news" : {
"_all" : {
"analyzer" : "ik_max_word"
},
"properties" : {
"content" : {
"type" : "string",
"boost" : 8.0,
"term_vector" : "with_positions_offsets",
"analyzer" : "ik_max_word",
"include_in_all" : true
},
"ctime" : {
"type" : "string"
},
"division_category_id" : {
"type" : "long"
},
"tag" : {
"type" : "string",
"boost" : 8.0,
"term_vector" : "with_positions_offsets",
"analyzer" : "ik_max_word",
"include_in_all" : true
},
"title" : {
"type" : "string",
"boost" : 8.0,
"term_vector" : "with_positions_offsets",
"analyzer" : "ik_max_word",
"include_in_all" : true
}
}
}
}
}
}
注意 ctime 数据类型定义错误,现在需要将它改为date日期类型。
创建 information_v2 索引
curl -XPUT http://localhost:9200/information_v2
curl -XPOST http://localhost:9200/information_v2/news/_mapping?pretty -d'
{
"news": {
"_all": {
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word",
"term_vector": "no",
"store": "false"
},
"properties": {
"title": {
"type": "string",
"store": "no",
"term_vector": "with_positions_offsets",
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word",
"include_in_all": "true",
"boost": 8
},
"content": {
"type": "string",
"store": "no",
"term_vector": "with_positions_offsets",
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word",
"include_in_all": "true",
"boost": 8
},
"tag": {
"type": "string",
"store": "no",
"term_vector": "with_positions_offsets",
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word",
"include_in_all": "true",
"boost": 8
},
"ctime": {
"type": "date"
}
}
}
}'
查看全新 _mapping
# curl -XGET http://localhost:9200/information_v2/news/_mapping?pretty
{
"information_v2" : {
"mappings" : {
"news" : {
"_all" : {
"analyzer" : "ik_max_word"
},
"properties" : {
"content" : {
"type" : "string",
"boost" : 8.0,
"term_vector" : "with_positions_offsets",
"analyzer" : "ik_max_word",
"include_in_all" : true
},
"ctime" : {
"type" : "date",
"format" : "strict_date_optional_time||epoch_millis"
},
"tag" : {
"type" : "string",
"boost" : 8.0,
"term_vector" : "with_positions_offsets",
"analyzer" : "ik_max_word",
"include_in_all" : true
},
"title" : {
"type" : "string",
"boost" : 8.0,
"term_vector" : "with_positions_offsets",
"analyzer" : "ik_max_word",
"include_in_all" : true
}
}
}
}
}
}
现在导入数据,导入完成后修改别名,将information 从 information_v1 切换到 information_v2
curl -XPOST http://localhost:9200/_aliases -d '
{
"actions": [
{ "remove": {
"alias": "information",
"index": "information_v1"
}},
{ "add": {
"alias": "information",
"index": "information_v2"
}}
]
}
'
当所以切换完成information_v1 已经没有什么用处了,这时可以删除information_v1
curl -XDELETE http://localhost:9200/information_v1
string, date, long, double, boolean or ip.