|
@@ -18,7 +18,6 @@ package org.codelibs.fess.helper;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.Collections;
|
|
|
import java.util.List;
|
|
|
-import java.util.concurrent.Callable;
|
|
|
import java.util.concurrent.ExecutionException;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
|
@@ -51,44 +50,46 @@ public class PopularWordHelper {
|
|
|
.expireAfterWrite(fessConfig.getSuggestPopularWordCacheExpireAsInteger().longValue(), TimeUnit.MINUTES).build();
|
|
|
}
|
|
|
|
|
|
- public List<String> getWordList(String seed, String[] tags, String[] fields, String[] excludes) {
|
|
|
- RoleQueryHelper roleQueryHelper = ComponentUtil.getRoleQueryHelper();
|
|
|
- String[] roles = roleQueryHelper.build().stream().toArray(n -> new String[n]);
|
|
|
+ public List<String> getWordList(final String seed, final String[] tags, final String[] fields, final String[] excludes) {
|
|
|
+ final RoleQueryHelper roleQueryHelper = ComponentUtil.getRoleQueryHelper();
|
|
|
+ final String[] roles = roleQueryHelper.build().stream().toArray(n -> new String[n]);
|
|
|
return getWordList(seed, tags, roles, fields, excludes);
|
|
|
}
|
|
|
|
|
|
- public List<String> getWordList(String seed, String[] tags, String[] roles, String[] fields, String[] excludes) {
|
|
|
+ public List<String> getWordList(final String seed, final String[] tags, final String[] roles, final String[] fields,
|
|
|
+ final String[] excludes) {
|
|
|
try {
|
|
|
- return cache.get(getCacheKey(seed, tags, roles, fields, excludes), new Callable<List<String>>() {
|
|
|
- @Override
|
|
|
- public List<String> call() throws Exception {
|
|
|
- final List<String> wordList = new ArrayList<String>();
|
|
|
- SuggestHelper suggestHelper = ComponentUtil.getSuggestHelper();
|
|
|
- final PopularWordsRequestBuilder popularWordsRequestBuilder =
|
|
|
- suggestHelper.suggester().popularWords().setSize(fessConfig.getSuggestPopularWordSizeAsInteger().intValue())
|
|
|
- .setWindowSize(fessConfig.getSuggestPopularWordWindowSizeAsInteger().intValue());
|
|
|
- if (seed != null) {
|
|
|
- popularWordsRequestBuilder.setSeed(seed);
|
|
|
- }
|
|
|
- StreamUtil.of(tags).forEach(tag -> popularWordsRequestBuilder.addTag(tag));
|
|
|
- StreamUtil.of(roles).forEach(role -> popularWordsRequestBuilder.addRole(role));
|
|
|
- StreamUtil.of(fields).forEach(field -> popularWordsRequestBuilder.addField(field));
|
|
|
- StreamUtil.of(excludes).forEach(exclude -> popularWordsRequestBuilder.addExcludeWord(exclude));
|
|
|
- popularWordsRequestBuilder.execute().then(r -> {
|
|
|
- r.getItems().stream().forEach(item -> wordList.add(item.getText()));
|
|
|
- }).error(t -> logger.warn("Failed to generate popular words.", t));
|
|
|
+ return cache.get(
|
|
|
+ getCacheKey(seed, tags, roles, fields, excludes),
|
|
|
+ () -> {
|
|
|
+ final List<String> wordList = new ArrayList<String>();
|
|
|
+ final SuggestHelper suggestHelper = ComponentUtil.getSuggestHelper();
|
|
|
+ final PopularWordsRequestBuilder popularWordsRequestBuilder =
|
|
|
+ suggestHelper.suggester().popularWords()
|
|
|
+ .setSize(fessConfig.getSuggestPopularWordSizeAsInteger().intValue())
|
|
|
+ .setWindowSize(fessConfig.getSuggestPopularWordWindowSizeAsInteger().intValue());
|
|
|
+ if (seed != null) {
|
|
|
+ popularWordsRequestBuilder.setSeed(seed);
|
|
|
+ }
|
|
|
+ StreamUtil.of(tags).forEach(tag -> popularWordsRequestBuilder.addTag(tag));
|
|
|
+ StreamUtil.of(roles).forEach(role -> popularWordsRequestBuilder.addRole(role));
|
|
|
+ StreamUtil.of(fields).forEach(field -> popularWordsRequestBuilder.addField(field));
|
|
|
+ StreamUtil.of(excludes).forEach(exclude -> popularWordsRequestBuilder.addExcludeWord(exclude));
|
|
|
+ popularWordsRequestBuilder.execute().then(r -> {
|
|
|
+ r.getItems().stream().forEach(item -> wordList.add(item.getText()));
|
|
|
+ }).error(t -> logger.warn("Failed to generate popular words.", t));
|
|
|
|
|
|
- return wordList;
|
|
|
- }
|
|
|
- });
|
|
|
- } catch (ExecutionException e) {
|
|
|
+ return wordList;
|
|
|
+ });
|
|
|
+ } catch (final ExecutionException e) {
|
|
|
logger.warn("Failed to load popular words.", e);
|
|
|
}
|
|
|
return Collections.emptyList();
|
|
|
}
|
|
|
|
|
|
- protected String getCacheKey(String seed, String[] tags, String[] roles, String[] fields, String[] excludes) {
|
|
|
- StringBuilder buf = new StringBuilder(100);
|
|
|
+ protected String getCacheKey(final String seed, final String[] tags, final String[] roles, final String[] fields,
|
|
|
+ final String[] excludes) {
|
|
|
+ final StringBuilder buf = new StringBuilder(100);
|
|
|
buf.append(seed).append(CACHE_KEY_SPLITTER);
|
|
|
StreamUtil.of(tags).sorted().reduce((l, r) -> l + r).ifPresent(v -> buf.append(v));
|
|
|
buf.append(CACHE_KEY_SPLITTER);
|