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.