@@ -4,6 +4,7 @@ var cli = require('commander'),
4
4
elasticsearch = require ( 'elasticsearch' )
5
5
async = require ( 'async' ) ,
6
6
cluster = require ( 'cluster' ) ,
7
+ moment = require ( 'moment' ) ,
7
8
_ = require ( 'underscore' ) ,
8
9
bunyan = require ( 'bunyan' ) ,
9
10
ProgressBar = require ( 'progress' ) ,
@@ -13,7 +14,7 @@ var cli = require('commander'),
13
14
14
15
15
16
cli
16
- . version ( '1.1.1 ' )
17
+ . version ( '1.1.2 ' )
17
18
. option ( '-f, --from [value]' , 'source index, eg. http://192.168.1.100:9200/old_index/old_type' )
18
19
. option ( '-t, --to [value]' , 'to index, eg. http://192.168.1.100:9200/new_index/new_type' )
19
20
. option ( '-c, --concurrency [value]' , 'concurrency for reindex' , require ( 'os' ) . cpus ( ) . length )
@@ -37,7 +38,41 @@ var custom_indexer = cli.args[0] ? require(fs.realpathSync(cli.args[0])) : null;
37
38
38
39
if ( cluster . isMaster ) {
39
40
if ( custom_indexer . sharded ) {
40
- custom_indexer . sharded . ranges . forEach ( function ( shard ) {
41
+ var ranges = [ ] ;
42
+ if ( custom_indexer . sharded . ranges ) {
43
+ ranges = custom_indexer . sharded . ranges ;
44
+ } else {
45
+ var now = moment ( ) ;
46
+ var start = moment ( custom_indexer . sharded . start ) ;
47
+ var end = custom_indexer . sharded . end ? moment ( custom_indexer . sharded . end ) : now ;
48
+ var current = start ;
49
+ var interval_days = 1 ;
50
+ switch ( custom_indexer . sharded . interval ) {
51
+ case 'month' :
52
+ interval_days = 30 ;
53
+ break ;
54
+ case 'week' :
55
+ interval_days = 7 ;
56
+ break ;
57
+ default :
58
+ interval_days = parseInt ( custom_indexer . sharded . interval ) ;
59
+ }
60
+ while ( current < end ) {
61
+ var current_end = current . clone ( ) . add ( interval_days , 'days' ) ;
62
+ if ( current_end > end ) {
63
+ current_end = end ;
64
+ }
65
+ ranges . push ( {
66
+ name : current . format ( 'YYMMDD' ) + '-' + current_end . format ( 'YYMMDD' ) ,
67
+ range : {
68
+ gte : current . format ( 'YYYY-MM-DD' ) ,
69
+ lt : current_end . format ( 'YYYY-MM-DD' )
70
+ }
71
+ } ) ;
72
+ current = current_end ;
73
+ }
74
+ }
75
+ ranges . forEach ( function ( shard ) {
41
76
var worker_arg = { range :{ } , name : shard . name } ;
42
77
worker_arg . range [ custom_indexer . sharded . field ] = shard . range ;
43
78
cluster . fork ( { worker_arg :JSON . stringify ( worker_arg ) } ) ;
@@ -96,6 +131,7 @@ if (cluster.isMaster) {
96
131
} ) ;
97
132
98
133
reindexer . on ( 'batch-complete' , function ( num_of_success ) {
134
+ console . log ( "\n" ) ;
99
135
bar . tick ( num_of_success ) ;
100
136
} ) ;
101
137
@@ -129,7 +165,7 @@ if (cluster.isMaster) {
129
165
scroll : cli . scroll
130
166
} , scroll_fetch ) ;
131
167
} else {
132
- console . log ( "\n Total " + processed_total + " documents have been reindexed!" ) ;
168
+ console . log ( "\n " + shard_name + " Total " + processed_total + " documents have been reindexed!" ) ;
133
169
process . exit ( ) ;
134
170
}
135
171
} ) ;
0 commit comments