fix popularwords

This commit is contained in:
yfujita 2018-08-25 01:35:32 +09:00
parent 68c601c965
commit b7de7d9add
2 changed files with 26 additions and 7 deletions

View file

@ -28,6 +28,7 @@ import javax.annotation.PostConstruct;
import org.codelibs.core.lang.StringUtil;
import org.codelibs.fess.entity.SearchRequestParams.SearchRequestType;
import org.codelibs.fess.mylasta.direction.FessConfig;
import org.codelibs.fess.suggest.exception.SuggesterException;
import org.codelibs.fess.suggest.request.popularwords.PopularWordsRequestBuilder;
import org.codelibs.fess.util.ComponentUtil;
import org.slf4j.Logger;
@ -78,9 +79,12 @@ public class PopularWordHelper {
stream(baseRoles).of(stream -> stream.forEach(role -> popularWordsRequestBuilder.addRole(role)));
stream(baseFields).of(stream -> stream.forEach(field -> popularWordsRequestBuilder.addField(field)));
stream(baseExcludes).of(stream -> stream.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));
try {
popularWordsRequestBuilder.execute().getResponse().getItems().stream()
.forEach(item -> wordList.add(item.getText()));
} catch (SuggesterException e) {
logger.warn("Failed to generate popular words.", e);
}
return wordList;
});

View file

@ -26,6 +26,8 @@ import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.Map;
import java.util.HashMap;
import java.util.function.Consumer;
import javax.annotation.PostConstruct;
@ -78,6 +80,8 @@ public class SuggestHelper {
protected PopularWordHelper popularWordHelper = null;
public long searchStoreIntervalMinute = 1;
@PostConstruct
public void init() {
fessConfig = ComponentUtil.getFessConfig();
@ -127,7 +131,7 @@ public class SuggestHelper {
}
public void indexFromSearchLog(final List<SearchLog> searchLogList) {
final Set<String> sessionIdSet = new HashSet<>();
final Map<String, LocalDateTime> sessionIdMap = new HashMap<>();
searchLogList.stream().forEach(
searchLog -> {
if (searchLog.getHitCount() == null
@ -135,9 +139,20 @@ public class SuggestHelper {
return;
}
final String sessionId = searchLog.getUserSessionId();
if (sessionId == null || sessionIdSet.contains(sessionId)) {
final String sessionId;
if (searchLog.getUserSessionId() != null) {
sessionId = searchLog.getUserSessionId();
} else {
sessionId = searchLog.getClientIp() + '_' + searchLog.getSearchWord();
}
final LocalDateTime requestedAt = searchLog.getRequestedAt();
if (sessionId == null) {
return;
} else if (sessionIdMap.containsKey(sessionId)) {
if (sessionIdMap.get(sessionId).plusMinutes(searchStoreIntervalMinute).isAfter(requestedAt)) {
return;
}
}
final StringBuilder sb = new StringBuilder(100);
@ -171,7 +186,7 @@ public class SuggestHelper {
if (fessConfig.isValidSearchLogPermissions(roles.toArray(new String[roles.size()]))) {
suggester.indexer().indexFromSearchWord(sb.toString(), fields.toArray(new String[fields.size()]),
tags.toArray(new String[tags.size()]), roles.toArray(new String[roles.size()]), 1, langs);
sessionIdSet.add(sessionId);
sessionIdMap.put(sessionId, requestedAt);
}
}
});