diff --git a/src/main/java/org/codelibs/fess/helper/SuggestHelper.java b/src/main/java/org/codelibs/fess/helper/SuggestHelper.java index cf92d74b8..3e9111a2c 100644 --- a/src/main/java/org/codelibs/fess/helper/SuggestHelper.java +++ b/src/main/java/org/codelibs/fess/helper/SuggestHelper.java @@ -72,15 +72,17 @@ public class SuggestHelper { protected Suggester suggester; - private FessConfig fessConfig; + protected FessConfig fessConfig; - private final Set contentFieldNameSet = new HashSet<>(); + protected final Set contentFieldNameSet = new HashSet<>(); - private final Set tagFieldNameSet = new HashSet<>(); + protected final Set tagFieldNameSet = new HashSet<>(); - private final Set roleFieldNameSet = new HashSet<>(); + protected final Set roleFieldNameSet = new HashSet<>(); - private List contentFieldList; + protected List contentFieldList; + + protected PopularWordHelper popularWordHelper = null; @PostConstruct public void init() { @@ -104,6 +106,10 @@ public class SuggestHelper { if (undefinedAnalyzer.size() > 0) { logger.warn("Undefined lang analyzer. " + undefinedAnalyzer.toString()); } + + if (ComponentUtil.hasPopularWordHelper()) { + popularWordHelper = ComponentUtil.getPopularWordHelper(); + } } public Suggester suggester() { @@ -154,7 +160,7 @@ public class SuggestHelper { } } }); - suggester.refresh(); + refresh(); } public void indexFromDocuments(final Consumer success, final Consumer error) { @@ -180,7 +186,7 @@ public class SuggestHelper { reader.addSort(SortBuilders.scoreSort()); return reader; }, 2, fessConfig.getSuggestUpdateRequestIntervalAsInteger().longValue()).then(response -> { - suggester.refresh(); + refresh(); success.accept(true); }).error(t -> error.accept(t)); } @@ -227,7 +233,7 @@ public class SuggestHelper { logger.warn("Failed to delete all words.", response.getErrors().get(0)); return false; } - suggester.refresh(); + refresh(); return true; } @@ -237,7 +243,7 @@ public class SuggestHelper { logger.warn("Failed to delete document words.", response.getErrors().get(0)); return false; } - suggester.refresh(); + refresh(); return true; } @@ -247,15 +253,10 @@ public class SuggestHelper { logger.warn("Failed to delete query words.", response.getErrors().get(0)); return false; } - suggester.refresh(); + refresh(); return true; } - public void refreshWords() { - deleteAllBadWords(); - storeAllElevateWords(); - } - public void storeAllElevateWords() { deleteAllBadWords(); @@ -268,7 +269,7 @@ public class SuggestHelper { addElevateWord(elevateWord.getSuggestWord(), elevateWord.getReading(), elevateWord.getLabelTypeValues(), elevateWord.getPermissions(), elevateWord.getBoost(), false); } - suggester.refresh(); + refresh(); } public void deleteAllElevateWord() { @@ -280,20 +281,21 @@ public class SuggestHelper { for (final ElevateWord elevateWord : list) { suggester.indexer().deleteElevateWord(elevateWord.getSuggestWord()); } - suggester.refresh(); + refresh(); } public void deleteElevateWord(final String word) { suggester.indexer().deleteElevateWord(word); - suggester.refresh(); + refresh(); } public void addElevateWord(final String word, final String reading, final String[] tags, final String[] permissions, final Float boost) { addElevateWord(word, reading, tags, permissions, boost, true); + refresh(); } - public void addElevateWord(final String word, final String reading, final String[] tags, final String[] permissions, final float boost, - final boolean commit) { + protected void addElevateWord(final String word, final String reading, final String[] tags, final String[] permissions, + final float boost, final boolean commit) { final List labelList = new ArrayList<>(); for (final String label : tags) { labelList.add(label); @@ -308,7 +310,7 @@ public class SuggestHelper { .replaceAll(TEXT_SEP + "+", TEXT_SEP).split(TEXT_SEP)), contentFieldList, labelList, roleList)); } - public void deleteAllBadWords() { + protected void deleteAllBadWords() { suggester.settings().badword().deleteAll(); } @@ -322,13 +324,23 @@ public class SuggestHelper { final String word = badWord.getSuggestWord(); suggester.indexer().addBadWord(word); } + refresh(); } public void addBadWord(final String badWord) { suggester.indexer().addBadWord(badWord); + refresh(); } public void deleteBadWord(final String badWord) { suggester.indexer().deleteBadWord(badWord); + refresh(); + } + + public synchronized void refresh() { + suggester.refresh(); + if (popularWordHelper != null) { + popularWordHelper.clearCache(); + } } } diff --git a/src/main/java/org/codelibs/fess/util/ComponentUtil.java b/src/main/java/org/codelibs/fess/util/ComponentUtil.java index 91bcdf598..579e30ad6 100644 --- a/src/main/java/org/codelibs/fess/util/ComponentUtil.java +++ b/src/main/java/org/codelibs/fess/util/ComponentUtil.java @@ -421,6 +421,10 @@ public final class ComponentUtil { return SingletonLaContainerFactory.getContainer().hasComponentDef(QUERY_HELPER); } + public static boolean hasPopularWordHelper() { + return SingletonLaContainerFactory.getContainer().hasComponentDef(POPULAR_WORD_HELPER); + } + public static boolean available() { try { return SingletonLaContainer.getComponent(SYSTEM_HELPER) != null;