diff --git a/src/main/java/org/codelibs/fess/app/web/admin/elevateword/AdminElevatewordAction.java b/src/main/java/org/codelibs/fess/app/web/admin/elevateword/AdminElevatewordAction.java index 3e0d761ca..20b7518b4 100644 --- a/src/main/java/org/codelibs/fess/app/web/admin/elevateword/AdminElevatewordAction.java +++ b/src/main/java/org/codelibs/fess/app/web/admin/elevateword/AdminElevatewordAction.java @@ -39,6 +39,7 @@ import org.codelibs.fess.app.web.CrudMode; import org.codelibs.fess.app.web.base.FessAdminAction; import org.codelibs.fess.es.config.exentity.SuggestElevateWord; import org.codelibs.fess.exception.FessSystemException; +import org.codelibs.fess.helper.SuggestHelper; import org.codelibs.fess.helper.SystemHelper; import org.dbflute.optional.OptionalEntity; import org.dbflute.optional.OptionalThing; @@ -66,6 +67,8 @@ public class AdminElevatewordAction extends FessAdminAction { private SystemHelper systemHelper; @Resource protected DynamicProperties crawlerProperties; + @Resource + protected SuggestHelper suggestHelper; // =================================================================================== // Hook @@ -223,10 +226,13 @@ public class AdminElevatewordAction extends FessAdminAction { public HtmlResponse create(final CreateForm form) { verifyCrudMode(form.crudMode, CrudMode.CREATE); validate(form, messages -> {}, toEditHtml()); - getSuggestElevateWord(form).ifPresent(entity -> { - suggestElevateWordService.store(entity); - saveInfo(messages -> messages.addSuccessCrudCreateCrudTable(GLOBAL)); - }).orElse(() -> { + getSuggestElevateWord(form).ifPresent( + entity -> { + suggestElevateWordService.store(entity); + suggestHelper.addElevateWord(entity.getSuggestWord(), entity.getReading(), entity.getTargetLabel(), + entity.getTargetRole(), entity.getBoost()); + saveInfo(messages -> messages.addSuccessCrudCreateCrudTable(GLOBAL)); + }).orElse(() -> { throwValidationError(messages -> messages.addErrorsCrudFailedToCreateCrudTable(GLOBAL), toEditHtml()); }); return redirect(getClass()); @@ -238,6 +244,8 @@ public class AdminElevatewordAction extends FessAdminAction { validate(form, messages -> {}, toEditHtml()); getSuggestElevateWord(form).ifPresent(entity -> { suggestElevateWordService.store(entity); + suggestHelper.deleteAllElevateWord(); + suggestHelper.storeAllElevateWords(); saveInfo(messages -> messages.addSuccessCrudUpdateCrudTable(GLOBAL)); }).orElse(() -> { throwValidationError(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, form.id), toEditHtml()); @@ -252,6 +260,7 @@ public class AdminElevatewordAction extends FessAdminAction { final String id = form.id; suggestElevateWordService.getSuggestElevateWord(id).ifPresent(entity -> { suggestElevateWordService.delete(entity); + suggestHelper.deleteElevateWord(entity.getSuggestWord()); saveInfo(messages -> messages.addSuccessCrudDeleteCrudTable(GLOBAL)); }).orElse(() -> { throwValidationError(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, id), toEditHtml()); diff --git a/src/main/java/org/codelibs/fess/helper/SuggestHelper.java b/src/main/java/org/codelibs/fess/helper/SuggestHelper.java index 63b87e87e..89ee65345 100644 --- a/src/main/java/org/codelibs/fess/helper/SuggestHelper.java +++ b/src/main/java/org/codelibs/fess/helper/SuggestHelper.java @@ -17,10 +17,7 @@ package org.codelibs.fess.helper; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; +import java.util.*; import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Consumer; @@ -32,11 +29,13 @@ import org.codelibs.fess.es.client.FessEsClient; import org.codelibs.fess.es.config.exbhv.SuggestBadWordBhv; import org.codelibs.fess.es.config.exbhv.SuggestElevateWordBhv; import org.codelibs.fess.es.config.exentity.SuggestBadWord; +import org.codelibs.fess.es.config.exentity.SuggestElevateWord; import org.codelibs.fess.es.log.exentity.SearchFieldLog; import org.codelibs.fess.es.log.exentity.SearchLog; 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.ElevateWord; import org.codelibs.fess.suggest.entity.SuggestItem; import org.codelibs.fess.suggest.index.contents.document.DocumentReader; import org.codelibs.fess.suggest.index.contents.document.ESSourceReader; @@ -66,7 +65,7 @@ public class SuggestHelper { public String[] roleFieldNames = { "role" }; - public String[] contentsIndex = { "content", "title" }; + public String[] contentsIndexFieldNames = { "content", "title" }; private static final String TEXT_SEP = " "; @@ -81,7 +80,7 @@ public class SuggestHelper { fessEsClient.admin().cluster().prepareHealth().setWaitForYellowStatus().execute().actionGet(); suggester = Suggester.builder().build(fessEsClient, fessConfig.getIndexDocumentIndex()); suggester.settings().array().delete(SuggestSettings.DefaultKeys.SUPPORTED_FIELDS); - for (final String field : contentsIndex) { + for (final String field : contentsIndexFieldNames) { suggester.settings().array().add(SuggestSettings.DefaultKeys.SUPPORTED_FIELDS, field); } suggester.createIndexIfNothing(); @@ -167,40 +166,44 @@ public class SuggestHelper { } public void storeAllElevateWords() { - // TODO - // suggestService.deleteAllElevateWords(); - // - // final List list = suggestElevateWordBhv.selectList(cb -> { - // cb.query().setDeletedBy_IsNull(); - // }); - // for (final SuggestElevateWord suggestElevateWord : list) { - // final String word = suggestElevateWord.getSuggestWord(); - // final String reading = suggestElevateWord.getReading(); - // final String labelStr = suggestElevateWord.getTargetLabel(); - // final String roleStr = suggestElevateWord.getTargetRole(); - // final long boost = suggestElevateWord.getBoost().longValue(); - // - // addElevateWord(word, reading, labelStr, roleStr, boost, false); - // } - // suggestService.commit(); - } + deleteAllBadWords(); - public void addElevateWord(final String word, final String reading, final String labels, final String roles, final long boost) { - addElevateWord(word, reading, labels, roles, boost, true); - } - - public void addElevateWord(final String word, final String reading, final String labels, final String roles, final long boost, - final boolean commit) { - final List badWordList = suggestBadWordBhv.selectList(badWordCB -> { - badWordCB.query().setSuggestWord_Equal(word); + final List list = suggestElevateWordBhv.selectList(cb -> { + cb.query().matchAll(); }); - if (badWordList.size() > 0) { - return; - } + for (final SuggestElevateWord elevateWord : list) { + addElevateWord(elevateWord.getSuggestWord(), elevateWord.getReading(), elevateWord.getTargetLabel(), + elevateWord.getTargetRole(), elevateWord.getBoost(), false); + } + suggester.refresh(); + } + + public void deleteAllElevateWord() { + final List list = suggestElevateWordBhv.selectList(cb -> { + cb.query().matchAll(); + }); + + for (final SuggestElevateWord elevateWord : list) { + suggester.indexer().deleteElevateWord(elevateWord.getSuggestWord()); + } + suggester.refresh(); + } + + public void deleteElevateWord(final String word) { + suggester.indexer().deleteElevateWord(word); + suggester.refresh(); + } + + public void addElevateWord(final String word, final String reading, final String tags, final String roles, final float boost) { + addElevateWord(word, reading, tags, roles, boost, true); + } + + public void addElevateWord(final String word, final String reading, final String tags, final String roles, final float boost, + final boolean commit) { final List labelList = new ArrayList(); - if (StringUtil.isNotBlank(labels)) { - final String[] array = labels.trim().split(","); + if (StringUtil.isNotBlank(tags)) { + final String[] array = tags.trim().split(","); for (final String label : array) { labelList.add(label); } @@ -213,23 +216,11 @@ public class SuggestHelper { } } - // TODO - // suggestService.addElevateWord(word, reading, labelList, roleList, boost); - // - // if (commit) { - // suggestService.commit(); - // } + suggester.indexer().addElevateWord( + new ElevateWord(word, boost, Collections.singletonList(reading), Arrays.asList(contentFieldNames), labelList, roleList)); } public void deleteAllBadWords() { - final List list = suggestBadWordBhv.selectList(cb -> { - cb.query().matchAll(); - }); - final Set badWords = new HashSet<>(); - for (final SuggestBadWord suggestBadWord : list) { - final String word = suggestBadWord.getSuggestWord(); - badWords.add(word); - } suggester.settings().badword().deleteAll(); }