diff --git a/pom.xml b/pom.xml index 0e864af5cdd06c3c9da46d869b28dd44f5091a87..f9bbc4f77ebd26c0c2553a2ad78bc9c2821cf6a3 100644 --- a/pom.xml +++ b/pom.xml @@ -494,6 +494,11 @@ <artifactId>jsonic</artifactId> <version>1.3.8</version> </dependency> + <dependency> + <groupId>com.fasterxml.jackson.core</groupId> + <artifactId>jackson-databind</artifactId> + <version>2.6.3</version> + </dependency> <!-- template --> <dependency> diff --git a/src/main/java/org/codelibs/fess/es/client/FessEsClient.java b/src/main/java/org/codelibs/fess/es/client/FessEsClient.java index e5d3a814e00ac30b1a8175aac4baa3c19858ce69..46cedad4d8534151f8ecb4e1f2b8432799398de4 100644 --- a/src/main/java/org/codelibs/fess/es/client/FessEsClient.java +++ b/src/main/java/org/codelibs/fess/es/client/FessEsClient.java @@ -163,6 +163,8 @@ import org.elasticsearch.threadpool.ThreadPool; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.io.BaseEncoding; public class FessEsClient implements Client { @@ -396,21 +398,37 @@ public class FessEsClient implements Client { if (ResourceUtil.isExist(dataPath)) { try { final BulkRequestBuilder builder = client.prepareBulk(); - Arrays.stream(FileUtil.readUTF8(dataPath).split("\n")).reduce((prev, line) -> { - if (StringUtil.isBlank(prev)) { - if (line.startsWith("{\"index\":{")) { - return line; - } else if (line.startsWith("{\"update\":{")) { - return line; - } else if (line.startsWith("{\"delete\":{")) { + ObjectMapper mapper = new ObjectMapper(); + Arrays.stream(FileUtil.readUTF8(dataPath).split("\n")).reduce( + (prev, line) -> { + try { + if (StringUtil.isBlank(prev)) { + Map<String, Map<String, String>> result = + mapper.readValue(line, new TypeReference<Map<String, Map<String, String>>>() { + }); + if (result.keySet().contains("index")) { + return line; + } else if (result.keySet().contains("update")) { + return line; + } else if (result.keySet().contains("delete")) { + return StringUtil.EMPTY; + } + } else { + Map<String, Map<String, String>> result = + mapper.readValue(prev, new TypeReference<Map<String, Map<String, String>>>() { + }); + if (result.keySet().contains("index")) { + final IndexRequestBuilder requestBuilder = + client.prepareIndex(configIndex, configType, result.get("index").get("_id")) + .setSource(line); + builder.add(requestBuilder); + } + } + } catch (Exception e) { + logger.warn("Failed to parse " + configIndex + "/" + configType + " mapping."); + } return StringUtil.EMPTY; - } - } else if (prev.startsWith("{\"index\":{")) { - final IndexRequestBuilder requestBuilder = client.prepareIndex(configIndex, configType).setSource(line); - builder.add(requestBuilder); - } - return StringUtil.EMPTY; - }); + }); final BulkResponse response = builder.execute().actionGet(); if (response.hasFailures()) { logger.warn("Failed to register " + dataPath.toString() + ": " + response.buildFailureMessage()); diff --git a/src/main/resources/fess_indices/.fess_user/role.bulk b/src/main/resources/fess_indices/.fess_user/role.bulk index 72b534122866c5d4c2804779d95c1a5501fecf60..176d9ece37bf6a830fe2823a2aa4c488262d06bd 100644 --- a/src/main/resources/fess_indices/.fess_user/role.bulk +++ b/src/main/resources/fess_indices/.fess_user/role.bulk @@ -1,2 +1,2 @@ {"index":{"_index":".fess_user","_type":"role","_id":"YWRtaW4="}} -{"name":"admin","id":"YWRtaW4="} +{"name":"admin"} diff --git a/src/main/resources/fess_indices/.fess_user/user.bulk b/src/main/resources/fess_indices/.fess_user/user.bulk index 5f8d1cec588faad7dddedfb3350c4bfc4fd81953..4b01251b0fe087fad4266076b8dacf88f79a718e 100644 --- a/src/main/resources/fess_indices/.fess_user/user.bulk +++ b/src/main/resources/fess_indices/.fess_user/user.bulk @@ -1,2 +1,2 @@ {"index":{"_index":".fess_user","_type":"user","_id":"YWRtaW4="}} -{"password":"8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918","roles":["YWRtaW4="],"name":"admin","id":"YWRtaW4="} +{"password":"8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918","roles":["YWRtaW4="],"name":"admin"}