由于ElasticSearch没有像mysql一样可以直接字段数据类型的方法,因此需要通过创建中间索引:data_index_1,备份数据到中间索引:data_index_1,然后删除原索引: data_index,重新创建正确数据类型索引:data_index,再把中间索引:data_index_1的数据备份到新创建索引:data_index。语句通过kibana的 dev_tools/console 执行。
操作步骤如下:
1. 创建一个中间索引
2. 向中间索引备份源索引的数据(mapping)
3. 查询确认数据是否copy过去
4. 删除有问题的索引
5. 重新创建同名的索引(★字段类型修改正确★)
6. 从中间索引还原到源索引的数据
7. 删除中间索引
获取索引mapping,可通过到Kibana查看索引的mapping,如图:
参考修改脚本,kibana执行:
1 # 1. 创建一个中间索引
2 #创建索引
3 PUT demo_metric_1/
4
5 # 创建Mapping
6 POST demo_metric_1/type/_mapping
7 {
8 "type": {
9 "properties": {
10 "log_time_date": {
11 "type": "date",
12 "format": "epoch_millis"
13 },
14 .....
15 }
16 }
17 }
18
19
20 # 2. 向中间索引备份源索引的数据
21
22 # 重建索引
23 POST _reindex
24 {
25 "source": {
26 "index": "demo_metric"
27 },
28 "dest": {
29 "index": "demo_metric_1"
30 }
31 }
32
33
34 # 3.查询确认数据是否copy过去
35 GET /demo_metric/type/_search
36
37 GET /demo_metric_1/type/_search
38
39
40 # 4.删除有问题的索引
41 # 删除有问题的索引
42 DELETE demo_metric
43
44
45 # 5.重新创建同名的索引(★字段类型修改正确★)
46 #创建索引
47 PUT demo_metric/
48
49 # 创建Mapping
50 POST demo_metric/type/_mapping
51 {
52 "type": {
53 "properties": {
54 "log_time_date": {
55 "type": "date",
56 "format": "epoch_millis"
57 },
58 .....
59 }
60 }
61 }
62
63
64 # 6. 从中间索引还原到源索引的数据
65 # 重建索引
66 POST _reindex
67 {
68 "source": {
69 "index": "demo_metric_1"
70 },
71 "dest": {
72 "index": "demo_metric"
73 }
74 }
75
76
77 # 7. 删除中间索引
78 DELETE demo_metric_1