diff --git a/src/main/java/org/codelibs/fess/client/FessEsClient.java b/src/main/java/org/codelibs/fess/client/FessEsClient.java index 3256b6b75..9722ab71b 100644 --- a/src/main/java/org/codelibs/fess/client/FessEsClient.java +++ b/src/main/java/org/codelibs/fess/client/FessEsClient.java @@ -2,7 +2,9 @@ package org.codelibs.fess.client; import static org.codelibs.elasticsearch.runner.ElasticsearchClusterRunner.newConfigs; +import java.io.IOException; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.List; @@ -17,6 +19,7 @@ import javax.annotation.PreDestroy; import org.apache.commons.codec.Charsets; import org.codelibs.core.beans.util.BeanUtil; import org.codelibs.core.io.FileUtil; +import org.codelibs.core.io.ResourceUtil; import org.codelibs.core.lang.StringUtil; import org.codelibs.elasticsearch.runner.ElasticsearchClusterRunner; import org.codelibs.elasticsearch.runner.ElasticsearchClusterRunner.Configs; @@ -339,6 +342,34 @@ public class FessEsClient implements Client { } else { logger.warn("Failed to create " + configIndex + "/" + configType + " mapping."); } + + String dataPath = indexConfigPath + "/" + configIndex + "/" + configType + ".bulk"; + 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\":{")) { + return StringUtil.EMPTY; + } + } else if (prev.startsWith("{\"index\":{")) { + IndexRequestBuilder requestBuilder = client.prepareIndex(configIndex, configType).setSource(line); + builder.add(requestBuilder); + } + return StringUtil.EMPTY; + }); + BulkResponse response = builder.execute().actionGet(); + if (response.hasFailures()) { + logger.warn("Failed to register " + dataPath.toString() + ": " + response.buildFailureMessage()); + } + } catch (Exception e) { + logger.warn("Failed to create " + configIndex + "/" + configType + " mapping."); + } + } } else if (logger.isDebugEnabled()) { logger.debug(configIndex + "/" + configType + " mapping exists."); } diff --git a/src/main/resources/fess_indices/.fess_config/scheduled_job.bulk b/src/main/resources/fess_indices/.fess_config/scheduled_job.bulk new file mode 100644 index 000000000..8502e12d0 --- /dev/null +++ b/src/main/resources/fess_indices/.fess_config/scheduled_job.bulk @@ -0,0 +1,8 @@ +{"index":{"_index":".fess_config","_type":"scheduled_job","_id":"1"}} +{"name":"Crawler","target":"all","cronExpression":"0 0 0 * * ?","scriptType":"groovy","scriptData":"return container.getComponent(\"crawlJob\").execute(executor);","jobLogging":true,"crawler":true,"available":true,"sortOrder":0,"createdBy":"system","createdTime":0,"updatedBy":"system","updatedTime":0} +{"index":{"_index":".fess_config","_type":"scheduled_job","_id":"2"}} +{"name":"Minutely Tasks","target":"all","cronExpression":"0 * * * * ?","scriptType":"groovy","scriptData":"return container.getComponent(\"aggregateLogJob\").execute();","jobLogging":false,"crawler":false,"available":true,"sortOrder":0,"createdBy":"system","createdTime":0,"updatedBy":"system","updatedTime":0} +{"index":{"_index":".fess_config","_type":"scheduled_job","_id":"3"}} +{"name":"Hourly Tasks","target":"all","cronExpression":"0 0 * * * ?","scriptType":"groovy","scriptData":"return container.getComponent(\"updateStatsJob\").execute() + container.getComponent(\"updateHotWordJob\").execute();","jobLogging":false,"crawler":false,"available":true,"sortOrder":0,"createdBy":"system","createdTime":0,"updatedBy":"system","updatedTime":0} +{"index":{"_index":".fess_config","_type":"scheduled_job","_id":"4"}} +{"name":"Daily Tasks","target":"all","cronExpression":"0 0 0 * * ?","scriptType":"groovy","scriptData":"return container.getComponent(\"purgeLogJob\").execute();","jobLogging":false,"crawler":false,"available":true,"sortOrder":0,"createdBy":"system","createdTime":0,"updatedBy":"system","updatedTime":0}