本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業務造成影響,請務必仔細閱讀。
在某些業務的使用場景下,您可能需要對索引的一些字段進行重命名。例如,使用DataWorks在阿里云Elasticsearch集群間遷移數據時,由于源集群數據中包含了特殊符號(例如@),而DataWorks不支持特殊符號,因此需要修改字段名(去掉特殊符號)后再進行數據遷移。本文介紹如何通過Logstash修改字段名。
背景信息
您可以通過兩種方式修改字段名:
使用Logstash的filter,對字段進行重命名。
本文采用此方式,以去除源索引字段的@符號為例進行演示。即將源索引字段@ctxt_user_info,重命名為目標索引字段ctxt_user_info。
使用Reindex遷移時,對字段進行重命名。
前提條件
您已完成以下操作:
創建阿里云Elasticsearch實例。
具體操作,請參見創建阿里云Elasticsearch實例,本文以7.10版本實例為例。
創建阿里云Logstash實例,需要與Elasticsearch實例在同一專有網絡下。
具體操作,請參見創建阿里云Logstash實例。
準備測試數據
本文使用的測試數據如下。可以看到源索引字段@ctxt_user_info中包含@字符。
{ "took" : 5, "timed_out" : false, "_shards" : { "total" : 5, "successful" : 5, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 6, "relation" : "eq" }, "max_score" : 1.0, "hits" : [ { "_index" : "product_info", "_type" : "_doc", "_id" : "rpN7fn0BKQKHRO31rK6C", "_score" : 1.0, "_source" : { "@ctxt_user_info" : "test1" } }, { "_index" : "product_info", "_type" : "_doc", "_id" : "r5N7fn0BKQKHRO31rK6C", "_score" : 1.0, "_source" : { "@ctxt_user_info" : "test2" } } ] } }
操作流程
步驟一:創建目標索引(可選)
如果您開啟了Elasticsearch的自動創建索引功能,可忽略此步驟。
自動創建的索引可能不符合您的預期,不建議開啟。
登錄目標阿里云Elasticsearch實例的Kibana控制臺。
具體操作,請參見登錄Kibana控制臺。
說明本文以阿里云Elasticsearch 7.10版本為例,其他版本操作可能略有差別,請以實際界面為準。
根據頁面提示進入Kibana主頁,單擊右上角的Dev tools。
在Console頁簽,執行以下腳本,創建目標索引product_info2。
PUT /product_info2 { "settings": { "number_of_shards": 5, "number_of_replicas": 1 }, "mappings": { "properties": { "ctxt_user_info": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } } } } }
步驟二:創建并配置Logstash管道
- 進入阿里云Elasticsearch控制臺的Logstash頁面。
- 進入目標實例。
- 在頂部菜單欄處,選擇地域。
- 在Logstash實例中單擊目標實例ID。
- 在左側導航欄,單擊管道管理。
- 單擊創建管道。
在創建管道任務頁面,輸入管道ID并配置管道。
本文使用的管道配置如下。
input { elasticsearch { hosts => ["http://es-cn-tl32gid**********.elasticsearch.aliyuncs.com:9200"] user => "elastic" password => "your_password" index => "product_info" docinfo => true } } filter { mutate { rename => { "@ctxt_user_info" => "ctxt_user_info" } } } output { elasticsearch { hosts => ["http://es-cn-tl32gid**********.elasticsearch.aliyuncs.com:9200"] user => "elastic" password => "your_password" index => "product_info2" document_type => "%{[@metadata][_type]}" document_id => "%{[@metadata][_id]}" } }
以上管道配置中,通過Logstash的filter.mutate.rename參數實現索引的重命名。
更多管道配置說明,請參見通過配置文件管理管道和Logstash配置文件說明。
警告 配置完成后,需要保存并部署才能生效。保存并部署操作會觸發實例重啟,請在不影響業務的前提下,繼續執行以下步驟。- 單擊保存或者保存并部署。
- 保存:將管道信息保存在Logstash里并觸發實例變更,配置不會生效。保存后,系統會返回管道管理頁面。可在管道列表區域,單擊操作列下的立即部署,觸發實例重啟,使配置生效。
- 保存并部署:保存并且部署后,會觸發實例重啟,使配置生效。
步驟三:驗證結果
登錄目標阿里云Elasticsearch的Kibana控制臺。
具體操作請參見登錄Kibana控制臺。
根據頁面提示進入Kibana主頁,單擊右上角的Dev tools。
在Console頁簽,執行以下腳本,查詢目標索引中的信息。
GET product_info2/_search
返回結果如下。
{ "took" : 4, "timed_out" : false, "_shards" : { "total" : 5, "successful" : 5, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 6, "relation" : "eq" }, "max_score" : 1.0, "hits" : [ { "_index" : "product_info2", "_type" : "_doc", "_id" : "r5N7fn0BKQKHRO31rK6C", "_score" : 1.0, "_source" : { "@timestamp" : "2021-12-03T04:14:26.872Z", "@version" : "1", "ctxt_user_info" : "test1" } }, { "_index" : "product_info2", "_type" : "_doc", "_id" : "rpN7fn0BKQKHRO31rK6C", "_score" : 1.0, "_source" : { "@timestamp" : "2021-12-03T04:14:26.871Z", "@version" : "1", "ctxt_user_info" : "test2" } } ] } }
根據結果可以看到,源索引字段@ctxt_user_info中的@已經去除,索引字段被重命名為ctxt_user_info。