具体思路见上面的链接,里面说的非常清晰。主要的问题就是怎么把上述的方法转变为java语言。主要分为四个步骤,为了方便观看,我把代码分步展示
第一步:新建mappings
CreateIndexRequest request = new CreateIndexRequest(indexNameNew);
String mappingsString = JSON.toJSONString(mappingNew);
request.source(mappingsString, XContentType.JSON);
client.indices().create(request,RequestOptions.DEFAULT);
第二步:复制原索引
Map<String, Object> mapOld = new HashMap<>();
mapOld.put("index",indexName);
Map<String, Object> mapNew = new HashMap<>();
mapNew.put("index",indexNameNew);
JSONObject jsonObject = new JSONObject();
jsonObject.put("source",mapOld);
jsonObject.put("dest",mapNew);
String param = jsonObject.toString();
CloseableHttpClient httpclient = HttpClients.createDefault();
String url = "http://"+host+":"+port+"/_reindex";
HttpPost httpPost = new HttpPost(url);
httpPost.setHeader("Content-Type", "application/json");
StringEntity entity = new StringEntity(param,"UTF-8");
httpPost.setEntity(entity);
CloseableHttpResponse response = httpclient.execute(httpPost);
HttpEntity entity1 = response.getEntity();
String string = EntityUtils.toString(entity1);
第三步:删除原索引
DeleteIndexRequest deRequest = new DeleteIndexRequest(indexName);
client.indices().delete(deRequest,RequestOptions.DEFAULT);
第四步:
Map<String, String> mapTwo = new HashMap<>();
mapTwo.put("index",indexNameNew);
mapTwo.put("alias",indexName);
Map<String, Object> mapName = new HashMap<>();
mapName.put("add",mapTwo);
List<Object> list = new ArrayList<>();
list.add(mapName);
JSONObject jsonName = new JSONObject();
jsonName.put("actions",list);
String paramName = jsonName.toString();
String paramOne = StringEscapeUtils.unescapeJava(paramName);
CloseableHttpClient httpclientName = HttpClients.createDefault();
String urlName = "http://"+host+":"+port+"/_aliases";
HttpPost httpPostName = new HttpPost(urlName);
httpPostName.setHeader("Content-Type", "application/json");
StringEntity entityName = new StringEntity(paramOne,"UTF-8");
httpPostName.setEntity(entityName);
httpclientName.execute(httpPostName);