Search in sources :

Example 1 with SearchLogBhv

use of org.codelibs.fess.es.log.exbhv.SearchLogBhv in project fess by codelibs.

the class SearchLogHelper method storeSearchLogList.

private void storeSearchLogList(final List<SearchLog> searchLogList) {
    final SearchLogBhv searchLogBhv = ComponentUtil.getComponent(SearchLogBhv.class);
    final SearchFieldLogBhv searchFieldLogBhv = ComponentUtil.getComponent(SearchFieldLogBhv.class);
    searchLogBhv.batchUpdate(searchLogList, op -> {
        op.setRefreshPolicy(Constants.TRUE);
    });
    searchLogList.stream().forEach(searchLog -> {
        final List<SearchFieldLog> fieldLogList = new ArrayList<>();
        searchLog.getSearchFieldLogList().stream().forEach(fieldLog -> {
            fieldLog.setSearchLogId(searchLog.getId());
            fieldLogList.add(fieldLog);
        });
        searchFieldLogBhv.batchInsert(fieldLogList);
    });
}
Also used : SearchFieldLogBhv(org.codelibs.fess.es.log.exbhv.SearchFieldLogBhv) ArrayList(java.util.ArrayList) SearchLogBhv(org.codelibs.fess.es.log.exbhv.SearchLogBhv) SearchFieldLog(org.codelibs.fess.es.log.exentity.SearchFieldLog)

Example 2 with SearchLogBhv

use of org.codelibs.fess.es.log.exbhv.SearchLogBhv 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

ArrayList (java.util.ArrayList)2 SearchFieldLogBhv (org.codelibs.fess.es.log.exbhv.SearchFieldLogBhv)2 SearchLogBhv (org.codelibs.fess.es.log.exbhv.SearchLogBhv)2 SearchFieldLog (org.codelibs.fess.es.log.exentity.SearchFieldLog)2 LocalDateTime (java.time.LocalDateTime)1 HashMap (java.util.HashMap)1 List (java.util.List)1 Map (java.util.Map)1 Queue (java.util.Queue)1 ConcurrentLinkedQueue (java.util.concurrent.ConcurrentLinkedQueue)1 PostConstruct (javax.annotation.PostConstruct)1 HttpServletRequest (javax.servlet.http.HttpServletRequest)1 StringUtils (org.apache.commons.lang3.StringUtils)1 LruHashMap (org.codelibs.core.collection.LruHashMap)1 StringUtil (org.codelibs.core.lang.StringUtil)1 StreamUtil.stream (org.codelibs.core.stream.StreamUtil.stream)1 Constants (org.codelibs.fess.Constants)1 SearchService (org.codelibs.fess.app.service.SearchService)1 SearchRequestParams (org.codelibs.fess.entity.SearchRequestParams)1 SearchRequestType (org.codelibs.fess.entity.SearchRequestParams.SearchRequestType)1