diff --git a/src/main/java/org/codelibs/fess/es/client/SearchEngineClient.java b/src/main/java/org/codelibs/fess/es/client/SearchEngineClient.java index ca370f991..7db24b314 100644 --- a/src/main/java/org/codelibs/fess/es/client/SearchEngineClient.java +++ b/src/main/java/org/codelibs/fess/es/client/SearchEngineClient.java @@ -36,6 +36,7 @@ import java.util.Map.Entry; import java.util.function.BiConsumer; import java.util.function.BiFunction; import java.util.function.Function; +import java.util.function.UnaryOperator; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -213,6 +214,10 @@ public class SearchEngineClient implements Client { protected String clusterName = "fesen"; + protected final List> docSettingRewriteRuleList = new ArrayList<>(); + + protected final List> docMappingRewriteRuleList = new ArrayList<>(); + public void addIndexConfig(final String path) { indexConfigList.add(path); } @@ -500,15 +505,23 @@ public class SearchEngineClient implements Client { protected String readIndexSetting(final String fesenType, final String indexConfigFile, final String numberOfShards, final String autoExpandReplicas) { final FessConfig fessConfig = ComponentUtil.getFessConfig(); - final String source = FileUtil.readUTF8(indexConfigFile); + String source = FileUtil.readUTF8(indexConfigFile); String dictionaryPath = System.getProperty("fess.dictionary.path", StringUtil.EMPTY); if (StringUtil.isNotBlank(dictionaryPath) && !dictionaryPath.endsWith("/")) { dictionaryPath = dictionaryPath + "/"; } - return source.replaceAll(Pattern.quote("${fess.dictionary.path}"), dictionaryPath)// + source = source.replaceAll(Pattern.quote("${fess.dictionary.path}"), dictionaryPath)// .replaceAll(Pattern.quote("${fess.index.codec}"), fessConfig.getIndexCodec())// .replaceAll(Pattern.quote("${fess.index.number_of_shards}"), numberOfShards)// .replaceAll(Pattern.quote("${fess.index.auto_expand_replicas}"), autoExpandReplicas); + for (final UnaryOperator rule : docSettingRewriteRuleList) { + source = rule.apply(source); + } + return source; + } + + public void addDocumentSettingRewriteRule(final UnaryOperator rule) { + docSettingRewriteRuleList.add(rule); } protected String getResourcePath(final String basePath, final String type, final String path) { @@ -530,6 +543,11 @@ public class SearchEngineClient implements Client { final String mappingFile = getResourcePath(indexConfigPath, fessConfig.getFesenType(), "/" + index + "/" + docType + ".json"); try { source = FileUtil.readUTF8(mappingFile); + if ("fess".equals(index)) { + for (final UnaryOperator rule : docMappingRewriteRuleList) { + source = rule.apply(source); + } + } } catch (final Exception e) { logger.warn("{} is not found.", mappingFile, e); } @@ -561,6 +579,10 @@ public class SearchEngineClient implements Client { } } + public void addDocumentMappingRewriteRule(final UnaryOperator rule) { + docMappingRewriteRuleList.add(rule); + } + public boolean updateAlias(final String newIndex) { final FessConfig fessConfig = ComponentUtil.getFessConfig(); final String updateAlias = fessConfig.getIndexDocumentUpdateIndex();