diff --git a/src/main/java/org/codelibs/fess/app/web/admin/suggest/AdminSuggestAction.java b/src/main/java/org/codelibs/fess/app/web/admin/suggest/AdminSuggestAction.java
new file mode 100644
index 000000000..4f92f8c4f
--- /dev/null
+++ b/src/main/java/org/codelibs/fess/app/web/admin/suggest/AdminSuggestAction.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright 2012-2016 CodeLibs Project and the Others.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
+ * either express or implied. See the License for the specific language
+ * governing permissions and limitations under the License.
+ */
+
+package org.codelibs.fess.app.web.admin.suggest;
+
+import org.codelibs.fess.app.web.base.FessAdminAction;
+import org.codelibs.fess.helper.SuggestHelper;
+import org.lastaflute.web.Execute;
+import org.lastaflute.web.response.HtmlResponse;
+import org.lastaflute.web.ruts.process.ActionRuntime;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.annotation.Resource;
+
+/**
+ * @author yfujita
+ */
+public class AdminSuggestAction extends FessAdminAction {
+ private static final Logger logger = LoggerFactory.getLogger(AdminSuggestAction.class);
+
+ // ===================================================================================
+ // Attribute
+ // =========
+ @Resource
+ protected SuggestHelper suggestHelper;
+
+ // ===================================================================================
+ // Hook
+ // ======
+ @Override
+ protected void setupHtmlData(final ActionRuntime runtime) {
+ super.setupHtmlData(runtime);
+ runtime.registerData("helpLink", systemHelper.getHelpLink(fessConfig.getOnlineHelpNameSuggest()));
+ runtime.registerData("totalWordsNum", suggestHelper.getAllWordsNum());
+ runtime.registerData("documentWordsNum", suggestHelper.getDocumentWordsNum());
+ runtime.registerData("queryWordsNum", suggestHelper.getQueryWordsNum());
+ }
+
+ // ===================================================================================
+ // Execute
+ // ========
+ @Execute
+ public HtmlResponse index() {
+ saveToken();
+ return asHtml(path_AdminSuggest_AdminSuggestJsp).useForm(SuggestForm.class);
+ }
+
+ @Execute
+ public HtmlResponse deleteAllWords() {
+ if (!suggestHelper.deleteAllWords()) {
+ throwValidationError(messages -> messages.addErrorsFailedToDeleteDocInAdmin(GLOBAL),
+ () -> asHtml(path_AdminSuggest_AdminSuggestJsp).useForm(SuggestForm.class));
+ }
+ saveInfo(messages -> messages.addSuccessDeleteDocFromIndex(GLOBAL));
+ verifyToken(() -> asHtml(path_AdminSuggest_AdminSuggestJsp).useForm(SuggestForm.class));
+ return redirect(getClass());
+ }
+
+ @Execute
+ public HtmlResponse deleteDocumentWords() {
+ if (!suggestHelper.deleteDocumentWords()) {
+ throwValidationError(messages -> messages.addErrorsFailedToDeleteDocInAdmin(GLOBAL),
+ () -> asHtml(path_AdminSuggest_AdminSuggestJsp).useForm(SuggestForm.class));
+ }
+ saveInfo(messages -> messages.addSuccessDeleteDocFromIndex(GLOBAL));
+ verifyToken(() -> asHtml(path_AdminSuggest_AdminSuggestJsp).useForm(SuggestForm.class));
+ return redirect(getClass());
+ }
+
+ @Execute
+ public HtmlResponse deleteQueryWords() {
+ if (!suggestHelper.deleteQueryWords()) {
+ throwValidationError(messages -> messages.addErrorsFailedToDeleteDocInAdmin(GLOBAL),
+ () -> asHtml(path_AdminSuggest_AdminSuggestJsp).useForm(SuggestForm.class));
+ }
+ saveInfo(messages -> messages.addSuccessDeleteDocFromIndex(GLOBAL));
+ verifyToken(() -> asHtml(path_AdminSuggest_AdminSuggestJsp).useForm(SuggestForm.class));
+ return redirect(getClass());
+ }
+}
diff --git a/src/main/java/org/codelibs/fess/app/web/admin/suggest/SuggestForm.java b/src/main/java/org/codelibs/fess/app/web/admin/suggest/SuggestForm.java
new file mode 100644
index 000000000..89b570bbb
--- /dev/null
+++ b/src/main/java/org/codelibs/fess/app/web/admin/suggest/SuggestForm.java
@@ -0,0 +1,4 @@
+package org.codelibs.fess.app.web.admin.suggest;
+
+public class SuggestForm {
+}
diff --git a/src/main/java/org/codelibs/fess/es/config/exentity/WebConfig.java b/src/main/java/org/codelibs/fess/es/config/exentity/WebConfig.java
index ae945dc95..738bd085e 100644
--- a/src/main/java/org/codelibs/fess/es/config/exentity/WebConfig.java
+++ b/src/main/java/org/codelibs/fess/es/config/exentity/WebConfig.java
@@ -239,7 +239,7 @@ public class WebConfig extends BsWebConfig implements CrawlingConfig {
rhList.toArray(new org.codelibs.fess.crawler.client.http.RequestHeader[rhList.size()]));
// proxy credentials
- if (paramMap.get("proxyUsername") == null && paramMap.get("proxyPassword") == null) {
+ if (paramMap.get("proxyUsername") != null && paramMap.get("proxyPassword") != null) {
paramMap.put(HcHttpClient.PROXY_CREDENTIALS_PROPERTY, new UsernamePasswordCredentials(paramMap.remove("proxyUsername")
.toString(), paramMap.remove("proxyPassword").toString()));
}
diff --git a/src/main/java/org/codelibs/fess/helper/SuggestHelper.java b/src/main/java/org/codelibs/fess/helper/SuggestHelper.java
index c9f951add..936ad8737 100644
--- a/src/main/java/org/codelibs/fess/helper/SuggestHelper.java
+++ b/src/main/java/org/codelibs/fess/helper/SuggestHelper.java
@@ -43,14 +43,18 @@ import org.codelibs.fess.mylasta.direction.FessConfig;
import org.codelibs.fess.suggest.Suggester;
import org.codelibs.fess.suggest.constants.FieldNames;
import org.codelibs.fess.suggest.entity.SuggestItem;
+import org.codelibs.fess.suggest.index.SuggestDeleteResponse;
import org.codelibs.fess.suggest.index.contents.document.ESSourceReader;
import org.codelibs.fess.suggest.settings.SuggestSettings;
import org.codelibs.fess.suggest.util.SuggestUtil;
import org.codelibs.fess.util.ComponentUtil;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
public class SuggestHelper {
+ private static final Logger logger = LoggerFactory.getLogger(SuggestHelper.class);
private static final String TEXT_SEP = " ";
@@ -179,6 +183,48 @@ public class SuggestHelper {
SuggestUtil.deleteByQuery(fessEsClient, suggester.getIndex(), suggester.getType(), boolQueryBuilder);
}
+ public long getAllWordsNum() {
+ return suggester.getAllWordsNum();
+ }
+
+ public long getDocumentWordsNum() {
+ return suggester.getDocumentWordsNum();
+ }
+
+ public long getQueryWordsNum() {
+ return suggester.getQueryWordsNum();
+ }
+
+ public boolean deleteAllWords() {
+ final SuggestDeleteResponse response = suggester.indexer().deleteAll();
+ if (response.hasError()) {
+ logger.warn("Failed to delete all words.", response.getErrors().get(0));
+ return false;
+ }
+ suggester.refresh();
+ return true;
+ }
+
+ public boolean deleteDocumentWords() {
+ final SuggestDeleteResponse response = suggester.indexer().deleteDocumentWords();
+ if (response.hasError()) {
+ logger.warn("Failed to delete document words.", response.getErrors().get(0));
+ return false;
+ }
+ suggester.refresh();
+ return true;
+ }
+
+ public boolean deleteQueryWords() {
+ final SuggestDeleteResponse response = suggester.indexer().deleteQueryWords();
+ if (response.hasError()) {
+ logger.warn("Failed to delete query words.", response.getErrors().get(0));
+ return false;
+ }
+ suggester.refresh();
+ return true;
+ }
+
public void refreshWords() {
deleteAllBadWords();
storeAllElevateWords();
diff --git a/src/main/java/org/codelibs/fess/mylasta/action/FessHtmlPath.java b/src/main/java/org/codelibs/fess/mylasta/action/FessHtmlPath.java
index 4c24178f8..20e51bb90 100644
--- a/src/main/java/org/codelibs/fess/mylasta/action/FessHtmlPath.java
+++ b/src/main/java/org/codelibs/fess/mylasta/action/FessHtmlPath.java
@@ -297,6 +297,9 @@ public interface FessHtmlPath {
/** The path of the HTML: /admin/searchlist/admin_searchlist_edit.jsp */
HtmlNext path_AdminSearchlist_AdminSearchlistEditJsp = new HtmlNext("/admin/searchlist/admin_searchlist_edit.jsp");
+ /** The path of the HTML: /admin/suggest/admin_suggest.jsp */
+ HtmlNext path_AdminSuggest_AdminSuggestJsp = new HtmlNext("/admin/suggest/admin_suggest.jsp");
+
/** The path of the HTML: /admin/systeminfo/admin_systeminfo.jsp */
HtmlNext path_AdminSysteminfo_AdminSysteminfoJsp = new HtmlNext("/admin/systeminfo/admin_systeminfo.jsp");
diff --git a/src/main/java/org/codelibs/fess/mylasta/direction/FessConfig.java b/src/main/java/org/codelibs/fess/mylasta/direction/FessConfig.java
index 482ba81aa..a416b0b52 100644
--- a/src/main/java/org/codelibs/fess/mylasta/direction/FessConfig.java
+++ b/src/main/java/org/codelibs/fess/mylasta/direction/FessConfig.java
@@ -810,6 +810,9 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
/** The key of the configuration. e.g. accesstoken */
String ONLINE_HELP_NAME_ACCESSTOKEN = "online.help.name.accesstoken";
+ /** The key of the configuration. e.g. suggest */
+ String ONLINE_HELP_NAME_SUGGEST = "online.help.name.suggest";
+
/** The key of the configuration. e.g. ja */
String ONLINE_HELP_SUPPORTED_LANGS = "online.help.supported.langs";
@@ -3613,6 +3616,13 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
*/
String getOnlineHelpNameAccesstoken();
+ /**
+ * Get the value for the key 'online.help.name.suggest'.
+ * The value is, e.g. suggest
+ * @return The value of found property. (NotNull: if not found, exception but basically no way)
+ */
+ String getOnlineHelpNameSuggest();
+
/**
* Get the value for the key 'online.help.supported.langs'.
* The value is, e.g. ja
@@ -5756,6 +5766,10 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
return get(FessConfig.ONLINE_HELP_NAME_ACCESSTOKEN);
}
+ public String getOnlineHelpNameSuggest() {
+ return get(FessConfig.ONLINE_HELP_NAME_SUGGEST);
+ }
+
public String getOnlineHelpSupportedLangs() {
return get(FessConfig.ONLINE_HELP_SUPPORTED_LANGS);
}
diff --git a/src/main/resources/fess_config.properties b/src/main/resources/fess_config.properties
index 6953de938..85b2cc5cc 100644
--- a/src/main/resources/fess_config.properties
+++ b/src/main/resources/fess_config.properties
@@ -417,6 +417,7 @@ online.help.name.backup=backup
online.help.name.upgrade=upgrade
online.help.name.esreq=esreq
online.help.name.accesstoken=accesstoken
+online.help.name.suggest=suggest
online.help.supported.langs=ja
diff --git a/src/main/resources/fess_label.properties b/src/main/resources/fess_label.properties
index 2df9f2bc7..e791e75c1 100644
--- a/src/main/resources/fess_label.properties
+++ b/src/main/resources/fess_label.properties
@@ -171,6 +171,7 @@ labels.menu_user=User
labels.menu_role=Role
labels.menu_group=Group
labels.menu_suggest=Suggest
+labels.menu_suggest_word=Suggest Word
labels.menu_elevate_word=Additional Word
labels.menu_bad_word=Bad Word
labels.menu_system_log=System Info
@@ -696,6 +697,13 @@ labels.access_token_token=Token
labels.access_token_expires=Expired
labels.access_token_parameter_name=Parameter Name
labels.access_token_updated_time=Created
+labels.suggest_word_configuration=Suggest Word
+labels.suggest_word_title_details=Suggest Word
+labels.suggest_word_type=Word Type
+labels.suggest_word_number=Word Number
+labels.suggest_word_type_all=All
+labels.suggest_word_type_document=Document
+labels.suggest_word_type_query=Query
labels.elevate_word_configuration=Additional Word
labels.elevate_word_title_details=Additional Word
labels.elevate_word_link_list=List
diff --git a/src/main/resources/fess_label_en.properties b/src/main/resources/fess_label_en.properties
index 3a9bc9e5b..99db0bb0c 100644
--- a/src/main/resources/fess_label_en.properties
+++ b/src/main/resources/fess_label_en.properties
@@ -171,6 +171,7 @@ labels.menu_user=User
labels.menu_role=Role
labels.menu_group=Group
labels.menu_suggest=Suggest
+labels.menu_suggest_word=Suggest Word
labels.menu_elevate_word=Additional Word
labels.menu_bad_word=Bad Word
labels.menu_system_log=System Info
@@ -696,6 +697,13 @@ labels.access_token_token=Token
labels.access_token_expires=Expired
labels.access_token_parameter_name=Parameter Name
labels.access_token_updated_time=Created
+labels.suggest_word_configuration=Suggest Word
+labels.suggest_word_title_details=Suggest Word
+labels.suggest_word_type=Word Type
+labels.suggest_word_number=Word Number
+labels.suggest_word_type_all=All
+labels.suggest_word_type_document=Document
+labels.suggest_word_type_query=Query
labels.elevate_word_configuration=Additional Word
labels.elevate_word_title_details=Additional Word
labels.elevate_word_link_list=List
diff --git a/src/main/webapp/WEB-INF/view/admin/suggest/admin_suggest.jsp b/src/main/webapp/WEB-INF/view/admin/suggest/admin_suggest.jsp
new file mode 100644
index 000000000..81f2ce3b1
--- /dev/null
+++ b/src/main/webapp/WEB-INF/view/admin/suggest/admin_suggest.jsp
@@ -0,0 +1,196 @@
+<%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>
+
+
+
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <%-- Message --%>
+
+
+
+
+
+
+
+ |
+ |
+ |
+
+
+
+
+ |
+ ${f:h(totalWordsNum)} |
+
+ ">
+
+
+
+
+ |
+
+
+ |
+ ${f:h(documentWordsNum)} |
+
+ ">
+
+
+
+
+ |
+
+
+ |
+ ${f:h(queryWordsNum)} |
+
+ ">
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/webapp/WEB-INF/view/common/admin/sidebar.jsp b/src/main/webapp/WEB-INF/view/common/admin/sidebar.jsp
index 580f2da0d..c5dff0f18 100644
--- a/src/main/webapp/WEB-INF/view/common/admin/sidebar.jsp
+++ b/src/main/webapp/WEB-INF/view/common/admin/sidebar.jsp
@@ -194,6 +194,14 @@
class="fa fa-angle-left pull-right">