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"%> + + + +<la:message key="labels.admin_brand_title" /> | <la:message + key="labels.suggest_word_configuration" /> + + + +
+ + + + + +
+
+

+ +

+
+
+
+
+
+ +
+ <%-- Message --%> +
+ +
${msg}
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
${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">