public void restore() {
		logger.debug("enter restore method");
		configService.initRestoreConfig();
		List<String> restoreIndices = configService.getRestoreIndices();
		if(restoreIndices == null || restoreIndices.size()==0){
			restoreIndices = findAllIndexesFromDir();
		}
		if(restoreIndices!=null && restoreIndices.size()>0){
			logger.debug("search index list:[{}]",restoreIndices);
			if(configService.disableMultiThread()){
				for(String indexName : restoreIndices){
					restoreByIndexName(indexName);
				}
			}
			else {
				//采用队列多线程模式
				int cpuCoreNumber = Runtime.getRuntime().availableProcessors();  
				logger.debug("cpu core(threadpool number):{}",cpuCoreNumber);
		        exec = Executors.newFixedThreadPool(cpuCoreNumber);  
		        int indexCount=0;
		        for(String indexName : restoreIndices){
		        	final String iName = indexName;
		        	exec.submit(new Callable<Object>(){
						public Object call() throws Exception {
							restoreByIndexName(iName);
							return null;
						}
		        	});
		        	indexCount++;
				}
		        logger.info("{} index will be restore",indexCount);
				try {
					exec.shutdown();
					exec.awaitTermination(Integer.MAX_VALUE, TimeUnit.DAYS);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
		else {
			logger.info("find no indices to restore");
		}
		configService.getRestoreClient().close();
		logger.debug("exit restore method");
	}