From 7e73136d27801a25d30313cb5dba7c9a2a14f6a9 Mon Sep 17 00:00:00 2001
From: Kaoru FUZITA <kaorufuzita@gmail.com>
Date: Wed, 11 Nov 2015 16:03:51 +0900
Subject: [PATCH] fix id of document index

---
 pom.xml                                       |  5 ++
 .../codelibs/fess/es/client/FessEsClient.java | 46 +++++++++++++------
 .../fess_indices/.fess_user/role.bulk         |  2 +-
 .../fess_indices/.fess_user/user.bulk         |  2 +-
 4 files changed, 39 insertions(+), 16 deletions(-)

diff --git a/pom.xml b/pom.xml
index 0e864af5c..f9bbc4f77 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 e5d3a814e..46cedad4d 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 72b534122..176d9ece3 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 5f8d1cec5..4b01251b0 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"}
-- 
GitLab