Search in sources :

Example 6 with SearchService

use of org.codelibs.fess.app.service.SearchService in project fess by codelibs.

the class SearchLogHelper method processClickLogQueue.

protected void processClickLogQueue(final Queue<ClickLog> queue) {
    final Map<String, Integer> clickCountMap = new HashMap<>();
    final List<ClickLog> clickLogList = new ArrayList<>();
    for (final ClickLog clickLog : queue) {
        try {
            final SearchLogBhv searchLogBhv = ComponentUtil.getComponent(SearchLogBhv.class);
            searchLogBhv.selectEntity(cb -> {
                cb.query().setQueryId_Equal(clickLog.getQueryId());
            }).ifPresent(entity -> {
                clickLogList.add(clickLog);
                final String docId = clickLog.getDocId();
                Integer countObj = clickCountMap.get(docId);
                if (countObj == null) {
                    countObj = Integer.valueOf(1);
                } else {
                    countObj = countObj.intValue() + 1;
                }
                clickCountMap.put(docId, countObj);
            }).orElse(() -> {
                logger.warn("Not Found for SearchLog: " + clickLog);
            });
        } catch (final Exception e) {
            logger.warn("Failed to process: " + clickLog, e);
        }
    }
    if (!clickLogList.isEmpty()) {
        try {
            final ClickLogBhv clickLogBhv = ComponentUtil.getComponent(ClickLogBhv.class);
            clickLogBhv.batchInsert(clickLogList);
        } catch (final Exception e) {
            logger.warn("Failed to insert: " + clickLogList, e);
        }
    }
    if (!clickCountMap.isEmpty()) {
        final SearchService searchService = ComponentUtil.getComponent(SearchService.class);
        try {
            searchService.bulkUpdate(builder -> {
                final FessConfig fessConfig = ComponentUtil.getFessConfig();
                searchService.getDocumentListByDocIds(clickCountMap.keySet().toArray(new String[clickCountMap.size()]), new String[] { fessConfig.getIndexFieldDocId() }, OptionalThing.of(FessUserBean.empty()), SearchRequestType.ADMIN_SEARCH).forEach(doc -> {
                    final String id = DocumentUtil.getValue(doc, fessConfig.getIndexFieldId(), String.class);
                    final String docId = DocumentUtil.getValue(doc, fessConfig.getIndexFieldDocId(), String.class);
                    if (id != null && docId != null && clickCountMap.containsKey(docId)) {
                        final Integer count = clickCountMap.get(docId);
                        final Script script = new Script("ctx._source." + fessConfig.getIndexFieldClickCount() + "+=" + count.toString());
                        final Map<String, Object> upsertMap = new HashMap<>();
                        upsertMap.put(fessConfig.getIndexFieldClickCount(), count);
                        builder.add(new UpdateRequest(fessConfig.getIndexDocumentUpdateIndex(), fessConfig.getIndexDocumentType(), id).script(script).upsert(upsertMap));
                    }
                });
            });
        } catch (final Exception e) {
            logger.warn("Failed to update clickCounts", e);
        }
    }
}
Also used : QueryResponseList(org.codelibs.fess.util.QueryResponseList) Constants(org.codelibs.fess.Constants) DocumentUtil(org.codelibs.fess.util.DocumentUtil) OptionalThing(org.dbflute.optional.OptionalThing) LocalDateTime(java.time.LocalDateTime) LoggerFactory(org.slf4j.LoggerFactory) HashMap(java.util.HashMap) LruHashMap(org.codelibs.core.collection.LruHashMap) ClickLog(org.codelibs.fess.es.log.exentity.ClickLog) StringUtils(org.apache.commons.lang3.StringUtils) LaRequestUtil(org.lastaflute.web.util.LaRequestUtil) ArrayList(java.util.ArrayList) FessUserBean(org.codelibs.fess.mylasta.action.FessUserBean) HttpServletRequest(javax.servlet.http.HttpServletRequest) SearchRequestType(org.codelibs.fess.entity.SearchRequestParams.SearchRequestType) FessConfig(org.codelibs.fess.mylasta.direction.FessConfig) SearchRequestParams(org.codelibs.fess.entity.SearchRequestParams) Map(java.util.Map) FavoriteLogBhv(org.codelibs.fess.es.log.exbhv.FavoriteLogBhv) SearchFieldLog(org.codelibs.fess.es.log.exentity.SearchFieldLog) UserInfo(org.codelibs.fess.es.log.exentity.UserInfo) Script(org.elasticsearch.script.Script) StreamUtil.stream(org.codelibs.core.stream.StreamUtil.stream) Logger(org.slf4j.Logger) UserInfoBhv(org.codelibs.fess.es.log.exbhv.UserInfoBhv) ClickLogBhv(org.codelibs.fess.es.log.exbhv.ClickLogBhv) SearchLog(org.codelibs.fess.es.log.exentity.SearchLog) SearchFieldLogBhv(org.codelibs.fess.es.log.exbhv.SearchFieldLogBhv) StringUtil(org.codelibs.core.lang.StringUtil) UpdateRequest(org.elasticsearch.action.update.UpdateRequest) SearchService(org.codelibs.fess.app.service.SearchService) List(java.util.List) SearchLogBhv(org.codelibs.fess.es.log.exbhv.SearchLogBhv) ComponentUtil(org.codelibs.fess.util.ComponentUtil) PostConstruct(javax.annotation.PostConstruct) Queue(java.util.Queue) ConcurrentLinkedQueue(java.util.concurrent.ConcurrentLinkedQueue) Script(org.elasticsearch.script.Script) HashMap(java.util.HashMap) LruHashMap(org.codelibs.core.collection.LruHashMap) UpdateRequest(org.elasticsearch.action.update.UpdateRequest) ClickLogBhv(org.codelibs.fess.es.log.exbhv.ClickLogBhv) ArrayList(java.util.ArrayList) SearchLogBhv(org.codelibs.fess.es.log.exbhv.SearchLogBhv) FessConfig(org.codelibs.fess.mylasta.direction.FessConfig) SearchService(org.codelibs.fess.app.service.SearchService) ClickLog(org.codelibs.fess.es.log.exentity.ClickLog)

Aggregations

SearchService (org.codelibs.fess.app.service.SearchService)6 IOException (java.io.IOException)5 HashMap (java.util.HashMap)5 Map (java.util.Map)5 ServletException (javax.servlet.ServletException)5 FessConfig (org.codelibs.fess.mylasta.direction.FessConfig)5 ArrayList (java.util.ArrayList)4 SearchRenderData (org.codelibs.fess.entity.SearchRenderData)3 WebApiException (org.codelibs.fess.exception.WebApiException)3 List (java.util.List)2 HttpServletRequest (javax.servlet.http.HttpServletRequest)2 StringUtil (org.codelibs.core.lang.StringUtil)2 Constants (org.codelibs.fess.Constants)2 FavoriteLogService (org.codelibs.fess.app.service.FavoriteLogService)2 SearchRequestParams (org.codelibs.fess.entity.SearchRequestParams)2 SearchRequestType (org.codelibs.fess.entity.SearchRequestParams.SearchRequestType)2 InvalidAccessTokenException (org.codelibs.fess.exception.InvalidAccessTokenException)2 UserInfoHelper (org.codelibs.fess.helper.UserInfoHelper)2 ComponentUtil (org.codelibs.fess.util.ComponentUtil)2 DocumentUtil (org.codelibs.fess.util.DocumentUtil)2