ES字符串類型字段imgs,有些歷史數據是用逗號分隔的字符串,須要將歷史數據拆分爲數組形式。正則表達式
建立索引並推送幾條典型的歷史數據,涵蓋如下幾種狀況:數組
PUT test_cj/test/id_1 { "imgs": "https://img2.autoimg.cn/hscdfs/g27/M08/C8/C9/autohomecar__ChcCQF2tFp-AVbd1AABUAEDjxME398.jpg,https://img2.autoimg.cn/hscdfs/g27/M00/C5/41/autohomecar__ChsEfF2tFp-AUNE9AABAAMdcvmc812.jpg,https://img2.autoimg.cn/hscdfs/g27/M06/C5/41/autohomecar__ChsEfF2tFp-AaGesAABUABSmyrM852.jpg" } PUT test_cj/test/id_2 { "imgs": [ "https://img2.autoimg.cn/hscdfs/g1/M08/83/34/autohomecar__ChcCQ1wGPV6AMsb0AAD8AKsOcww068.jpg", "https://img2.autoimg.cn/hscdfs/g1/M03/B4/5D/autohomecar__ChsEmVwGPV-AQmnZAADMAMSUUHU068.jpg", "https://img2.autoimg.cn/hscdfs/g1/M00/83/34/autohomecar__ChcCQ1wGPV-ABZk0AACcAItlOsc793.jpg", "https://img2.autoimg.cn/hscdfs/g1/M07/B3/D1/autohomecar__ChsEj1wGPV-APTZEAABcACQZNGk338.jpg", "https://img2.autoimg.cn/hscdfs/g1/M0B/83/34/autohomecar__ChcCQ1wGPV-ASLK_AACgAO-S6mU461.jpg" ] } PUT test_cj/test/id_3 { "imgs": "" } PUT test_cj/test/id_4 { "imgs": [] }
GET test_cj/_search
[ { "_index" : "test_cj", "_type" : "test", "_id" : "id_1", "_score" : 1.0, "_source" : { "imgs" : "https://img2.autoimg.cn/hscdfs/g27/M08/C8/C9/autohomecar__ChcCQF2tFp-AVbd1AABUAEDjxME398.jpg,https://img2.autoimg.cn/hscdfs/g27/M00/C5/41/autohomecar__ChsEfF2tFp-AUNE9AABAAMdcvmc812.jpg,https://img2.autoimg.cn/hscdfs/g27/M06/C5/41/autohomecar__ChsEfF2tFp-AaGesAABUABSmyrM852.jpg" } }, { "_index" : "test_cj", "_type" : "test", "_id" : "id_2", "_score" : 1.0, "_source" : { "imgs" : [ "https://img2.autoimg.cn/hscdfs/g1/M08/83/34/autohomecar__ChcCQ1wGPV6AMsb0AAD8AKsOcww068.jpg", "https://img2.autoimg.cn/hscdfs/g1/M03/B4/5D/autohomecar__ChsEmVwGPV-AQmnZAADMAMSUUHU068.jpg", "https://img2.autoimg.cn/hscdfs/g1/M00/83/34/autohomecar__ChcCQ1wGPV-ABZk0AACcAItlOsc793.jpg", "https://img2.autoimg.cn/hscdfs/g1/M07/B3/D1/autohomecar__ChsEj1wGPV-APTZEAABcACQZNGk338.jpg", "https://img2.autoimg.cn/hscdfs/g1/M0B/83/34/autohomecar__ChcCQ1wGPV-ASLK_AACgAO-S6mU461.jpg" ] } }, { "_index" : "test_cj", "_type" : "test", "_id" : "id_3", "_score" : 1.0, "_source" : { "imgs" : "" } }, { "_index" : "test_cj", "_type" : "test", "_id" : "id_4", "_score" : 1.0, "_source" : { "imgs" : [ ] } } ]
使用painless腳本更新歷史數據。有幾點須要注意:less
POST test_cj/_update_by_query?conflicts=proceed { "script": { "source": """ if(ctx._source['imgs'] instanceof String){ String s=ctx._source['imgs']; ArrayList array=new ArrayList(); if(!s.isEmpty()){ String splitter = ","; StringTokenizer tokenValue = new StringTokenizer(s, splitter); while (tokenValue.hasMoreTokens()) { array.add(tokenValue.nextToken()); } } ctx._source.imgs=array; } """ } }
4.若是更新數據量較大,須要執行一段時間,期間查看執行進度:測試
GET _tasks?detailed=true&actions=*byquery
5.查看執行結果。code
GET test_cj/_search
[ { "_index" : "test_cj", "_type" : "test", "_id" : "id_1", "_score" : 1.0, "_source" : { "imgs" : [ "https://img2.autoimg.cn/hscdfs/g27/M08/C8/C9/autohomecar__ChcCQF2tFp-AVbd1AABUAEDjxME398.jpg", "https://img2.autoimg.cn/hscdfs/g27/M00/C5/41/autohomecar__ChsEfF2tFp-AUNE9AABAAMdcvmc812.jpg", "https://img2.autoimg.cn/hscdfs/g27/M06/C5/41/autohomecar__ChsEfF2tFp-AaGesAABUABSmyrM852.jpg" ] } }, { "_index" : "test_cj", "_type" : "test", "_id" : "id_2", "_score" : 1.0, "_source" : { "imgs" : [ "https://img2.autoimg.cn/hscdfs/g1/M08/83/34/autohomecar__ChcCQ1wGPV6AMsb0AAD8AKsOcww068.jpg", "https://img2.autoimg.cn/hscdfs/g1/M03/B4/5D/autohomecar__ChsEmVwGPV-AQmnZAADMAMSUUHU068.jpg", "https://img2.autoimg.cn/hscdfs/g1/M00/83/34/autohomecar__ChcCQ1wGPV-ABZk0AACcAItlOsc793.jpg", "https://img2.autoimg.cn/hscdfs/g1/M07/B3/D1/autohomecar__ChsEj1wGPV-APTZEAABcACQZNGk338.jpg", "https://img2.autoimg.cn/hscdfs/g1/M0B/83/34/autohomecar__ChcCQ1wGPV-ASLK_AACgAO-S6mU461.jpg" ] } }, { "_index" : "test_cj", "_type" : "test", "_id" : "id_3", "_score" : 1.0, "_source" : { "imgs" : [ ] } }, { "_index" : "test_cj", "_type" : "test", "_id" : "id_4", "_score" : 1.0, "_source" : { "imgs" : [ ] } } ]