diff --git a/.gitignore b/.gitignore
index 175d5db57..354dd0d77 100644
--- a/.gitignore
+++ b/.gitignore
@@ -18,3 +18,4 @@
*.iml
.idea
.DS_Store
+/plugins/
diff --git a/pom.xml b/pom.xml
index eb458f168..fa2c267d3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -49,6 +49,8 @@
true
UTF-8
${basedir}/src/test/resources/tomcat-users.xml
+ https://oss.sonatype.org/content/repositories/snapshots
+ http://central.maven.org/maven2
fess
@@ -185,6 +187,33 @@
${basedir}/dbflute_fess
+
+ maven-antrun-plugin
+ 1.8
+
+
+ org.apache.ant
+ ant
+ 1.9.6
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ run
+
+
diff --git a/src/main/java/org/codelibs/fess/client/FessEsClient.java b/src/main/java/org/codelibs/fess/client/FessEsClient.java
index 01c9a1605..875008e5b 100644
--- a/src/main/java/org/codelibs/fess/client/FessEsClient.java
+++ b/src/main/java/org/codelibs/fess/client/FessEsClient.java
@@ -2,7 +2,10 @@ package org.codelibs.fess.client;
import static org.codelibs.elasticsearch.runner.ElasticsearchClusterRunner.newConfigs;
+import java.io.IOException;
import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
@@ -15,6 +18,8 @@ import org.codelibs.core.io.FileUtil;
import org.codelibs.core.lang.StringUtil;
import org.codelibs.elasticsearch.runner.ElasticsearchClusterRunner;
import org.codelibs.elasticsearch.runner.ElasticsearchClusterRunner.Configs;
+import org.codelibs.elasticsearch.runner.net.Curl;
+import org.codelibs.elasticsearch.runner.net.CurlResponse;
import org.codelibs.fess.Constants;
import org.codelibs.fess.ResultOffsetExceededException;
import org.codelibs.fess.entity.FacetInfo;
@@ -159,10 +164,21 @@ public class FessEsClient implements Client {
protected List indexConfigList = new ArrayList<>();
+ protected Map> configListMap = new HashMap<>();
+
public void addIndexConfig(String path) {
indexConfigList.add(path);
}
+ public void addConfigFile(String index, String path) {
+ List list = configListMap.get(index);
+ if (list == null) {
+ list = new ArrayList<>();
+ configListMap.put(index, list);
+ }
+ list.add(path);
+ }
+
public void setSettings(Map settings) {
this.settings = settings;
}
@@ -214,6 +230,7 @@ public class FessEsClient implements Client {
if (settings != null) {
settingsBuilder.put(settings);
}
+ settingsBuilder.put("path.plugins", System.getProperty("user.dir") + "/plugins");
});
runner.build(config);
}
@@ -263,6 +280,27 @@ public class FessEsClient implements Client {
// ignore
}
if (!exists) {
+ if (runner != null) {// TODO replace with url
+ configListMap.getOrDefault(configIndex, Collections.emptyList()).forEach(
+ path -> {
+ String source = null;
+ final String filePath = indexConfigPath + "/" + configIndex + "/" + path;
+ try {
+ source = FileUtil.readUTF8(filePath);
+ try (CurlResponse response =
+ Curl.post(runner.node(), "_configsync/file").param("path", path).body(source).execute()) {
+ if (response.getHttpStatusCode() == 200) {
+ logger.info("Register " + path + " to " + configIndex);
+ } else {
+ logger.warn("Invalid request for " + path);
+ }
+ }
+ } catch (final Exception e) {
+ logger.warn("Failed to register " + filePath, e);
+ }
+ });
+ }
+
try {
String source = null;
final String indexConfigFile = indexConfigPath + "/" + configIndex + ".json";
diff --git a/src/main/resources/esclient.dicon b/src/main/resources/esclient.dicon
index c251514fe..c66c67a24 100644
--- a/src/main/resources/esclient.dicon
+++ b/src/main/resources/esclient.dicon
@@ -9,6 +9,18 @@
"fess/doc"
+
+ "fess"
+ "ja/mapping.txt"
+
+
+ "fess"
+ "ja/synonym.txt"
+
+
+ "fess"
+ "ja/kuromoji.txt"
+
".fess_config/boost_document_rule"
diff --git a/src/main/resources/fess_indices/fess/ja/kuromoji.txt b/src/main/resources/fess_indices/fess/ja/kuromoji.txt
new file mode 100644
index 000000000..0584019a9
--- /dev/null
+++ b/src/main/resources/fess_indices/fess/ja/kuromoji.txt
@@ -0,0 +1,3 @@
+日本経済新聞,日本 経済 新聞,ニホン ケイザイ シンブン,カスタム名詞
+関西国際空港,関西 国際 空港,カンサイ コクサイ クウコウ,テスト名詞
+朝青龍,朝青龍,アサショウリュウ,カスタム名詞
diff --git a/src/main/resources/fess_indices/fess/ja/mapping.txt b/src/main/resources/fess_indices/fess/ja/mapping.txt
new file mode 100644
index 000000000..9276761bf
--- /dev/null
+++ b/src/main/resources/fess_indices/fess/ja/mapping.txt
@@ -0,0 +1,189 @@
+# Half-width Katakana => Full-width Katakana
+"ア" => "ア"
+"イ" => "イ"
+"ウ" => "ウ"
+"エ" => "エ"
+"オ" => "オ"
+"カ" => "カ"
+"キ" => "キ"
+"ク" => "ク"
+"ケ" => "ケ"
+"コ" => "コ"
+"サ" => "サ"
+"シ" => "シ"
+"ス" => "ス"
+"セ" => "セ"
+"ソ" => "ソ"
+"タ" => "タ"
+"チ" => "チ"
+"ツ" => "ツ"
+"テ" => "テ"
+"ト" => "ト"
+"ナ" => "ナ"
+"ニ" => "ニ"
+"ヌ" => "ヌ"
+"ネ" => "ネ"
+"ノ" => "ノ"
+"ハ" => "ハ"
+"ヒ" => "ヒ"
+"フ" => "フ"
+"ヘ" => "ヘ"
+"ホ" => "ホ"
+"マ" => "マ"
+"ミ" => "ミ"
+"ム" => "ム"
+"メ" => "メ"
+"モ" => "モ"
+"ヤ" => "ヤ"
+"ユ" => "ユ"
+"ヨ" => "ヨ"
+"ラ" => "ラ"
+"リ" => "リ"
+"ル" => "ル"
+"レ" => "レ"
+"ロ" => "ロ"
+"ワ" => "ワ"
+"ヲ" => "ヲ"
+"ン" => "ン"
+"ッ" => "ッ"
+"ァ" => "ァ"
+"ィ" => "ィ"
+"ゥ" => "ゥ"
+"ェ" => "ェ"
+"ォ" => "ォ"
+"ャ" => "ャ"
+"ュ" => "ュ"
+"ョ" => "ョ"
+"ガ" => "ガ"
+"ギ" => "ギ"
+"グ" => "グ"
+"ゲ" => "ゲ"
+"ゴ" => "ゴ"
+"ザ" => "ザ"
+"ジ" => "ジ"
+"ズ" => "ズ"
+"ゼ" => "ゼ"
+"ゾ" => "ゾ"
+"ダ" => "ダ"
+"ヂ" => "ヂ"
+"ヅ" => "ヅ"
+"デ" => "デ"
+"ド" => "ド"
+"バ" => "バ"
+"ビ" => "ビ"
+"ブ" => "ブ"
+"ベ" => "ベ"
+"ボ" => "ボ"
+"パ" => "パ"
+"ピ" => "ピ"
+"プ" => "プ"
+"ペ" => "ペ"
+"ポ" => "ポ"
+
+# Full-width alpha-numeric => Half-width alpha-numeric
+"0" => "0"
+"1" => "1"
+"2" => "2"
+"3" => "3"
+"4" => "4"
+"5" => "5"
+"6" => "6"
+"7" => "7"
+"8" => "8"
+"9" => "9"
+
+"A" => "A"
+"B" => "B"
+"C" => "C"
+"D" => "D"
+"E" => "E"
+"F" => "F"
+"G" => "G"
+"H" => "H"
+"I" => "I"
+"J" => "J"
+"K" => "K"
+"L" => "L"
+"M" => "M"
+"N" => "N"
+"O" => "O"
+"P" => "P"
+"Q" => "Q"
+"R" => "R"
+"S" => "S"
+"T" => "T"
+"U" => "U"
+"V" => "V"
+"W" => "W"
+"X" => "X"
+"Y" => "Y"
+"Z" => "Z"
+
+"a" => "a"
+"b" => "b"
+"c" => "c"
+"d" => "d"
+"e" => "e"
+"f" => "f"
+"g" => "g"
+"h" => "h"
+"i" => "i"
+"j" => "j"
+"k" => "k"
+"l" => "l"
+"m" => "m"
+"n" => "n"
+"o" => "o"
+"p" => "p"
+"q" => "q"
+"r" => "r"
+"s" => "s"
+"t" => "t"
+"u" => "u"
+"v" => "v"
+"w" => "w"
+"x" => "x"
+"y" => "y"
+"z" => "z"
+
+# !"#$%&'()=|-^\@[`{;:]+*}/_<>?
+"!" => "!"
+"”" => "\""
+"#" => "#"
+"$" => "$"
+"%" => "%"
+"&" => "&"
+"’" => "'"
+"(" => "("
+")" => ")"
+"=" => "="
+"|" => "|"
+"-" => "-"
+"^" => "^"
+"¥" => "\\"
+"@" => "@"
+"[" => "["
+"`" => "`"
+"{" => "{"
+";" => ";"
+":" => ":"
+"]" => "]"
+"+" => "+"
+"*" => "*"
+"}" => "}"
+"/" => "/"
+"_" => "_"
+"<" => "<"
+">" => ">"
+"?" => "?"
+"‘" => "`"
+
+"①" => "1"
+"②" => "2"
+"③" => "3"
+"④" => "4"
+"⑤" => "5"
+"⑥" => "6"
+"⑦" => "7"
+"⑧" => "8"
+"⑨" => "9"
diff --git a/src/main/resources/fess_indices/fess/ja/synonym.txt b/src/main/resources/fess_indices/fess/ja/synonym.txt
new file mode 100644
index 000000000..e432e75ca
--- /dev/null
+++ b/src/main/resources/fess_indices/fess/ja/synonym.txt
@@ -0,0 +1 @@
+fess,フェス