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"}