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.