|
@@ -15,12 +15,17 @@
|
|
*/
|
|
*/
|
|
package org.codelibs.fess.app.service;
|
|
package org.codelibs.fess.app.service;
|
|
|
|
|
|
|
|
+import java.nio.charset.StandardCharsets;
|
|
import java.time.LocalDateTime;
|
|
import java.time.LocalDateTime;
|
|
import java.time.ZoneId;
|
|
import java.time.ZoneId;
|
|
import java.time.ZoneOffset;
|
|
import java.time.ZoneOffset;
|
|
import java.time.format.DateTimeFormatter;
|
|
import java.time.format.DateTimeFormatter;
|
|
|
|
+import java.util.Base64;
|
|
|
|
+import java.util.HashMap;
|
|
import java.util.LinkedHashMap;
|
|
import java.util.LinkedHashMap;
|
|
|
|
+import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
import javax.annotation.Resource;
|
|
|
|
|
|
@@ -28,6 +33,10 @@ import org.codelibs.core.beans.util.BeanUtil;
|
|
import org.codelibs.core.lang.StringUtil;
|
|
import org.codelibs.core.lang.StringUtil;
|
|
import org.codelibs.fess.Constants;
|
|
import org.codelibs.fess.Constants;
|
|
import org.codelibs.fess.app.pager.SearchLogPager;
|
|
import org.codelibs.fess.app.pager.SearchLogPager;
|
|
|
|
+import org.codelibs.fess.es.log.allcommon.EsPagingResultBean;
|
|
|
|
+import org.codelibs.fess.es.log.cbean.ClickLogCB;
|
|
|
|
+import org.codelibs.fess.es.log.cbean.FavoriteLogCB;
|
|
|
|
+import org.codelibs.fess.es.log.cbean.SearchLogCB;
|
|
import org.codelibs.fess.es.log.exbhv.ClickLogBhv;
|
|
import org.codelibs.fess.es.log.exbhv.ClickLogBhv;
|
|
import org.codelibs.fess.es.log.exbhv.FavoriteLogBhv;
|
|
import org.codelibs.fess.es.log.exbhv.FavoriteLogBhv;
|
|
import org.codelibs.fess.es.log.exbhv.SearchLogBhv;
|
|
import org.codelibs.fess.es.log.exbhv.SearchLogBhv;
|
|
@@ -38,12 +47,29 @@ import org.codelibs.fess.exception.FessSystemException;
|
|
import org.codelibs.fess.helper.SystemHelper;
|
|
import org.codelibs.fess.helper.SystemHelper;
|
|
import org.codelibs.fess.mylasta.direction.FessConfig;
|
|
import org.codelibs.fess.mylasta.direction.FessConfig;
|
|
import org.codelibs.fess.taglib.FessFunctions;
|
|
import org.codelibs.fess.taglib.FessFunctions;
|
|
-import org.dbflute.cbean.result.PagingResultBean;
|
|
|
|
import org.dbflute.optional.OptionalEntity;
|
|
import org.dbflute.optional.OptionalEntity;
|
|
|
|
+import org.elasticsearch.search.aggregations.AggregationBuilders;
|
|
|
|
+import org.elasticsearch.search.aggregations.BucketOrder;
|
|
|
|
+import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramInterval;
|
|
|
|
+import org.elasticsearch.search.aggregations.bucket.histogram.Histogram;
|
|
|
|
+import org.elasticsearch.search.aggregations.bucket.terms.Terms;
|
|
|
|
+import org.elasticsearch.search.aggregations.metrics.avg.Avg;
|
|
|
|
+import org.elasticsearch.search.aggregations.metrics.cardinality.Cardinality;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
|
|
public class SearchLogService {
|
|
public class SearchLogService {
|
|
|
|
+
|
|
|
|
+ private static final String COUNT = "count";
|
|
|
|
+
|
|
|
|
+ private static final String KEY = "key";
|
|
|
|
+
|
|
|
|
+ private static final String ID = "id";
|
|
|
|
+
|
|
|
|
+ private static final String USER_INFO_ID = "userInfoId";
|
|
|
|
+
|
|
|
|
+ private static final String QUERY_TIME = "queryTime";
|
|
|
|
+
|
|
private static final Logger logger = LoggerFactory.getLogger(SearchLogService.class);
|
|
private static final Logger logger = LoggerFactory.getLogger(SearchLogService.class);
|
|
|
|
|
|
@Resource
|
|
@Resource
|
|
@@ -67,91 +93,205 @@ public class SearchLogService {
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
|
|
- public PagingResultBean<?> getSearchLogList(final SearchLogPager pager) {
|
|
|
|
- final PagingResultBean<?> list;
|
|
|
|
- if (SearchLogPager.LOG_TYPE_CLICK.equalsIgnoreCase(pager.logType)) {
|
|
|
|
- list = clickLogBhv.selectPage(cb -> {
|
|
|
|
|
|
+ public List<?> getSearchLogList(final SearchLogPager pager) {
|
|
|
|
+ final EsPagingResultBean<?> list;
|
|
|
|
+ if (SearchLogPager.LOG_TYPE_CLICK.equalsIgnoreCase(pager.logType)
|
|
|
|
+ || SearchLogPager.LOG_TYPE_CLICK_TOP.equalsIgnoreCase(pager.logType)) {
|
|
|
|
+ list = (EsPagingResultBean<?>) clickLogBhv.selectPage(cb -> {
|
|
cb.paging(pager.getPageSize(), pager.getCurrentPageNumber());
|
|
cb.paging(pager.getPageSize(), pager.getCurrentPageNumber());
|
|
cb.query().addOrderBy_RequestedAt_Desc();
|
|
cb.query().addOrderBy_RequestedAt_Desc();
|
|
- if (StringUtil.isNotBlank(pager.queryId)) {
|
|
|
|
- cb.query().setQueryId_Term(pager.queryId);
|
|
|
|
- }
|
|
|
|
- if (StringUtil.isNotBlank(pager.userSessionId)) {
|
|
|
|
- cb.query().setUserSessionId_Term(pager.userSessionId);
|
|
|
|
- }
|
|
|
|
- if (StringUtil.isNotBlank(pager.requestedTimeRange)) {
|
|
|
|
- String[] values = pager.requestedTimeRange.split(" - ");
|
|
|
|
- DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
|
|
|
|
- try {
|
|
|
|
- if (values.length > 0) {
|
|
|
|
- cb.query().setRequestedAt_GreaterEqual(LocalDateTime.parse(values[0], formatter));
|
|
|
|
- }
|
|
|
|
- if (values.length > 1) {
|
|
|
|
- cb.query().setRequestedAt_LessEqual(LocalDateTime.parse(values[1], formatter));
|
|
|
|
- }
|
|
|
|
- } catch (Exception e) {
|
|
|
|
- if (logger.isDebugEnabled()) {
|
|
|
|
- logger.debug("Failed to parse " + pager.requestedTimeRange, e);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+ createClickLogCondition(pager, cb);
|
|
|
|
+ });
|
|
|
|
+ } else if (SearchLogPager.LOG_TYPE_CLICK_TOP.equalsIgnoreCase(pager.logType)) {
|
|
|
|
+ list = (EsPagingResultBean<?>) clickLogBhv.selectPage(cb -> {
|
|
|
|
+ cb.fetchFirst(0);
|
|
|
|
+ createClickLogCondition(pager, cb);
|
|
|
|
+ cb.aggregation().filter("top_click_filter", null, null, aggs -> {
|
|
|
|
+ aggs.setUrl_Count();
|
|
|
|
+ });
|
|
});
|
|
});
|
|
} else if (SearchLogPager.LOG_TYPE_FAVORITE.equalsIgnoreCase(pager.logType)) {
|
|
} else if (SearchLogPager.LOG_TYPE_FAVORITE.equalsIgnoreCase(pager.logType)) {
|
|
- list = favoriteLogBhv.selectPage(cb -> {
|
|
|
|
|
|
+ list = (EsPagingResultBean<?>) favoriteLogBhv.selectPage(cb -> {
|
|
cb.paging(pager.getPageSize(), pager.getCurrentPageNumber());
|
|
cb.paging(pager.getPageSize(), pager.getCurrentPageNumber());
|
|
cb.query().addOrderBy_CreatedAt_Desc();
|
|
cb.query().addOrderBy_CreatedAt_Desc();
|
|
- if (StringUtil.isNotBlank(pager.queryId)) {
|
|
|
|
- cb.query().setQueryId_Term(pager.queryId);
|
|
|
|
- }
|
|
|
|
- if (StringUtil.isNotBlank(pager.userSessionId)) {
|
|
|
|
- cb.query().setUserInfoId_Term(pager.userSessionId);
|
|
|
|
- }
|
|
|
|
- if (StringUtil.isNotBlank(pager.requestedTimeRange)) {
|
|
|
|
- String[] values = pager.requestedTimeRange.split(" - ");
|
|
|
|
- DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
|
|
|
|
- try {
|
|
|
|
- if (values.length > 0) {
|
|
|
|
- cb.query().setCreatedAt_GreaterEqual(LocalDateTime.parse(values[0], formatter));
|
|
|
|
- }
|
|
|
|
- if (values.length > 1) {
|
|
|
|
- cb.query().setCreatedAt_LessEqual(parseDateTime(values[1], formatter));
|
|
|
|
- }
|
|
|
|
- } catch (Exception e) {
|
|
|
|
- if (logger.isDebugEnabled()) {
|
|
|
|
- logger.debug("Failed to parse " + pager.requestedTimeRange, e);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+ createFavoriteLogCondition(pager, cb);
|
|
});
|
|
});
|
|
|
|
+ } else if (SearchLogPager.LOG_TYPE_SEARCH_COUNT_HOUR.equalsIgnoreCase(pager.logType)) {
|
|
|
|
+ list = (EsPagingResultBean<?>) searchLogBhv.selectPage(cb -> {
|
|
|
|
+ cb.fetchFirst(0);
|
|
|
|
+ createSearchLogCondition(pager, cb);
|
|
|
|
+ cb.aggregation().setRequestedAt_DateHistogram(SearchLogPager.LOG_TYPE_SEARCH_COUNT_HOUR, op -> {
|
|
|
|
+ op.dateHistogramInterval(DateHistogramInterval.HOUR);
|
|
|
|
+ op.minDocCount(0);
|
|
|
|
+ op.order(BucketOrder.key(true));
|
|
|
|
+ }, null);
|
|
|
|
+ });
|
|
|
|
+ final Histogram agg = list.getAggregations().get(SearchLogPager.LOG_TYPE_SEARCH_COUNT_HOUR);
|
|
|
|
+ final List<? extends Histogram.Bucket> buckets = agg.getBuckets();
|
|
|
|
+ updatePagerByAgg(pager, buckets.size());
|
|
|
|
+ return buckets.stream().map(e -> {
|
|
|
|
+ final Map<String, Object> map = new HashMap<>();
|
|
|
|
+ map.put(ID, Base64.getUrlEncoder().encodeToString(e.getKeyAsString().getBytes(StandardCharsets.UTF_8)));
|
|
|
|
+ map.put(KEY, e.getKeyAsString());
|
|
|
|
+ map.put(COUNT, e.getDocCount());
|
|
|
|
+ return map;
|
|
|
|
+ }).collect(Collectors.toList());
|
|
|
|
+ } else if (SearchLogPager.LOG_TYPE_SEARCH_COUNT_DAY.equalsIgnoreCase(pager.logType)) {
|
|
|
|
+ list = (EsPagingResultBean<?>) searchLogBhv.selectPage(cb -> {
|
|
|
|
+ cb.fetchFirst(0);
|
|
|
|
+ createSearchLogCondition(pager, cb);
|
|
|
|
+ cb.aggregation().setRequestedAt_DateHistogram(SearchLogPager.LOG_TYPE_SEARCH_COUNT_DAY, op -> {
|
|
|
|
+ op.dateHistogramInterval(DateHistogramInterval.DAY);
|
|
|
|
+ op.minDocCount(0);
|
|
|
|
+ op.order(BucketOrder.key(true));
|
|
|
|
+ }, null);
|
|
|
|
+ });
|
|
|
|
+ final Histogram agg = list.getAggregations().get(SearchLogPager.LOG_TYPE_SEARCH_COUNT_DAY);
|
|
|
|
+ final List<? extends Histogram.Bucket> buckets = agg.getBuckets();
|
|
|
|
+ updatePagerByAgg(pager, buckets.size());
|
|
|
|
+ return buckets.stream().map(e -> {
|
|
|
|
+ final Map<String, Object> map = new HashMap<>();
|
|
|
|
+ map.put(ID, Base64.getUrlEncoder().encodeToString(e.getKeyAsString().getBytes(StandardCharsets.UTF_8)));
|
|
|
|
+ map.put(KEY, e.getKeyAsString());
|
|
|
|
+ map.put(COUNT, e.getDocCount());
|
|
|
|
+ return map;
|
|
|
|
+ }).collect(Collectors.toList());
|
|
|
|
+ } else if (SearchLogPager.LOG_TYPE_SEARCH_USER_HOUR.equalsIgnoreCase(pager.logType)) {
|
|
|
|
+ list = (EsPagingResultBean<?>) searchLogBhv.selectPage(cb -> {
|
|
|
|
+ cb.fetchFirst(0);
|
|
|
|
+ createSearchLogCondition(pager, cb);
|
|
|
|
+ cb.aggregation().setRequestedAt_DateHistogram(SearchLogPager.LOG_TYPE_SEARCH_USER_HOUR, op -> {
|
|
|
|
+ op.dateHistogramInterval(DateHistogramInterval.HOUR);
|
|
|
|
+ op.subAggregation(AggregationBuilders.cardinality(USER_INFO_ID).field(USER_INFO_ID));
|
|
|
|
+ op.minDocCount(0);
|
|
|
|
+ op.order(BucketOrder.key(true));
|
|
|
|
+ }, null);
|
|
|
|
+ });
|
|
|
|
+ final Histogram agg = list.getAggregations().get(SearchLogPager.LOG_TYPE_SEARCH_USER_HOUR);
|
|
|
|
+ final List<? extends Histogram.Bucket> buckets = agg.getBuckets();
|
|
|
|
+ updatePagerByAgg(pager, buckets.size());
|
|
|
|
+ return buckets.stream().map(e -> {
|
|
|
|
+ final Map<String, Object> map = new HashMap<>();
|
|
|
|
+ map.put(ID, Base64.getUrlEncoder().encodeToString(e.getKeyAsString().getBytes(StandardCharsets.UTF_8)));
|
|
|
|
+ map.put(KEY, e.getKeyAsString());
|
|
|
|
+ final Cardinality value = e.getAggregations().get(USER_INFO_ID);
|
|
|
|
+ map.put(COUNT, value.getValue());
|
|
|
|
+ return map;
|
|
|
|
+ }).collect(Collectors.toList());
|
|
|
|
+ } else if (SearchLogPager.LOG_TYPE_SEARCH_USER_DAY.equalsIgnoreCase(pager.logType)) {
|
|
|
|
+ list = (EsPagingResultBean<?>) searchLogBhv.selectPage(cb -> {
|
|
|
|
+ cb.fetchFirst(0);
|
|
|
|
+ createSearchLogCondition(pager, cb);
|
|
|
|
+ cb.aggregation().setRequestedAt_DateHistogram(SearchLogPager.LOG_TYPE_SEARCH_USER_DAY, op -> {
|
|
|
|
+ op.dateHistogramInterval(DateHistogramInterval.DAY);
|
|
|
|
+ op.subAggregation(AggregationBuilders.cardinality(USER_INFO_ID).field(USER_INFO_ID));
|
|
|
|
+ op.minDocCount(0);
|
|
|
|
+ op.order(BucketOrder.key(true));
|
|
|
|
+ }, null);
|
|
|
|
+ });
|
|
|
|
+ final Histogram agg = list.getAggregations().get(SearchLogPager.LOG_TYPE_SEARCH_USER_DAY);
|
|
|
|
+ final List<? extends Histogram.Bucket> buckets = agg.getBuckets();
|
|
|
|
+ updatePagerByAgg(pager, buckets.size());
|
|
|
|
+ return buckets.stream().map(e -> {
|
|
|
|
+ final Map<String, Object> map = new HashMap<>();
|
|
|
|
+ map.put(ID, Base64.getUrlEncoder().encodeToString(e.getKeyAsString().getBytes(StandardCharsets.UTF_8)));
|
|
|
|
+ map.put(KEY, e.getKeyAsString());
|
|
|
|
+ final Cardinality value = e.getAggregations().get(USER_INFO_ID);
|
|
|
|
+ map.put(COUNT, value.getValue());
|
|
|
|
+ return map;
|
|
|
|
+ }).collect(Collectors.toList());
|
|
|
|
+ } else if (SearchLogPager.LOG_TYPE_SEARCH_REQTIMEAVG_HOUR.equalsIgnoreCase(pager.logType)) {
|
|
|
|
+ list = (EsPagingResultBean<?>) searchLogBhv.selectPage(cb -> {
|
|
|
|
+ cb.fetchFirst(0);
|
|
|
|
+ createSearchLogCondition(pager, cb);
|
|
|
|
+ cb.aggregation().setRequestedAt_DateHistogram(SearchLogPager.LOG_TYPE_SEARCH_REQTIMEAVG_HOUR, op -> {
|
|
|
|
+ op.dateHistogramInterval(DateHistogramInterval.HOUR);
|
|
|
|
+ op.subAggregation(AggregationBuilders.avg(QUERY_TIME).field(QUERY_TIME));
|
|
|
|
+ op.minDocCount(0);
|
|
|
|
+ op.order(BucketOrder.key(true));
|
|
|
|
+ }, null);
|
|
|
|
+ });
|
|
|
|
+ final Histogram agg = list.getAggregations().get(SearchLogPager.LOG_TYPE_SEARCH_REQTIMEAVG_HOUR);
|
|
|
|
+ final List<? extends Histogram.Bucket> buckets = agg.getBuckets();
|
|
|
|
+ updatePagerByAgg(pager, buckets.size());
|
|
|
|
+ return buckets.stream().map(e -> {
|
|
|
|
+ final Map<String, Object> map = new HashMap<>();
|
|
|
|
+ map.put(ID, Base64.getUrlEncoder().encodeToString(e.getKeyAsString().getBytes(StandardCharsets.UTF_8)));
|
|
|
|
+ map.put(KEY, e.getKeyAsString());
|
|
|
|
+ final Avg value = e.getAggregations().get(QUERY_TIME);
|
|
|
|
+ map.put(COUNT, value.getValueAsString());
|
|
|
|
+ return map;
|
|
|
|
+ }).collect(Collectors.toList());
|
|
|
|
+ } else if (SearchLogPager.LOG_TYPE_SEARCH_REQTIMEAVG_DAY.equalsIgnoreCase(pager.logType)) {
|
|
|
|
+ list = (EsPagingResultBean<?>) searchLogBhv.selectPage(cb -> {
|
|
|
|
+ cb.fetchFirst(0);
|
|
|
|
+ createSearchLogCondition(pager, cb);
|
|
|
|
+ cb.aggregation().setRequestedAt_DateHistogram(SearchLogPager.LOG_TYPE_SEARCH_REQTIMEAVG_DAY, op -> {
|
|
|
|
+ op.dateHistogramInterval(DateHistogramInterval.DAY);
|
|
|
|
+ op.subAggregation(AggregationBuilders.avg(QUERY_TIME).field(QUERY_TIME));
|
|
|
|
+ op.minDocCount(0);
|
|
|
|
+ op.order(BucketOrder.key(true));
|
|
|
|
+ }, null);
|
|
|
|
+ });
|
|
|
|
+ final Histogram agg = list.getAggregations().get(SearchLogPager.LOG_TYPE_SEARCH_REQTIMEAVG_DAY);
|
|
|
|
+ final List<? extends Histogram.Bucket> buckets = agg.getBuckets();
|
|
|
|
+ updatePagerByAgg(pager, buckets.size());
|
|
|
|
+ return buckets.stream().map(e -> {
|
|
|
|
+ final Map<String, Object> map = new HashMap<>();
|
|
|
|
+ map.put(ID, Base64.getUrlEncoder().encodeToString(e.getKeyAsString().getBytes(StandardCharsets.UTF_8)));
|
|
|
|
+ map.put(KEY, e.getKeyAsString());
|
|
|
|
+ final Avg value = e.getAggregations().get(QUERY_TIME);
|
|
|
|
+ map.put(COUNT, value.getValueAsString());
|
|
|
|
+ return map;
|
|
|
|
+ }).collect(Collectors.toList());
|
|
|
|
+ } else if (SearchLogPager.LOG_TYPE_SEARCH_KEYWORD.equalsIgnoreCase(pager.logType)) {
|
|
|
|
+ list = (EsPagingResultBean<?>) searchLogBhv.selectPage(cb -> {
|
|
|
|
+ cb.fetchFirst(0);
|
|
|
|
+ createSearchLogCondition(pager, cb);
|
|
|
|
+ cb.aggregation().setSearchWord_Terms(SearchLogPager.LOG_TYPE_SEARCH_KEYWORD, op -> {
|
|
|
|
+ op.size(pager.getPageSize());
|
|
|
|
+ }, null);
|
|
|
|
+ });
|
|
|
|
+ final Terms agg = list.getAggregations().get(SearchLogPager.LOG_TYPE_SEARCH_KEYWORD);
|
|
|
|
+ final List<? extends Terms.Bucket> buckets = agg.getBuckets();
|
|
|
|
+ updatePagerByAgg(pager, buckets.size());
|
|
|
|
+ return buckets.stream().map(e -> {
|
|
|
|
+ final Map<String, Object> map = new HashMap<>();
|
|
|
|
+ map.put(ID, Base64.getUrlEncoder().encodeToString(e.getKeyAsString().getBytes(StandardCharsets.UTF_8)));
|
|
|
|
+ map.put(KEY, e.getKeyAsString());
|
|
|
|
+ map.put(COUNT, e.getDocCount());
|
|
|
|
+ return map;
|
|
|
|
+ }).collect(Collectors.toList());
|
|
|
|
+ } else if (SearchLogPager.LOG_TYPE_SEARCH_ZEROHIT.equalsIgnoreCase(pager.logType)) {
|
|
|
|
+ list = (EsPagingResultBean<?>) searchLogBhv.selectPage(cb -> {
|
|
|
|
+ cb.fetchFirst(0);
|
|
|
|
+ createSearchLogCondition(pager, cb);
|
|
|
|
+ cb.query().setHitCount_Equal(0L);
|
|
|
|
+ cb.aggregation().setSearchWord_Terms(SearchLogPager.LOG_TYPE_SEARCH_ZEROHIT, op -> {
|
|
|
|
+ op.size(pager.getPageSize());
|
|
|
|
+ }, null);
|
|
|
|
+ });
|
|
|
|
+ final Terms agg = list.getAggregations().get(SearchLogPager.LOG_TYPE_SEARCH_ZEROHIT);
|
|
|
|
+ final List<? extends Terms.Bucket> buckets = agg.getBuckets();
|
|
|
|
+ updatePagerByAgg(pager, buckets.size());
|
|
|
|
+ return buckets.stream().map(e -> {
|
|
|
|
+ final Map<String, Object> map = new HashMap<>();
|
|
|
|
+ map.put(ID, Base64.getUrlEncoder().encodeToString(e.getKeyAsString().getBytes(StandardCharsets.UTF_8)));
|
|
|
|
+ map.put(KEY, e.getKeyAsString());
|
|
|
|
+ map.put(COUNT, e.getDocCount());
|
|
|
|
+ return map;
|
|
|
|
+ }).collect(Collectors.toList());
|
|
|
|
+ // } else if (SearchLogPager.LOG_TYPE_SEARCH_ZEROCLICK.equalsIgnoreCase(pager.logType)) {
|
|
|
|
+ // list = (EsPagingResultBean<?>) searchLogBhv.selectPage(cb -> {
|
|
|
|
+ // cb.fetchFirst(0);
|
|
|
|
+ // createSearchLogCondition(pager, cb);
|
|
|
|
+ // // TODO 0 clicked
|
|
|
|
+ // });
|
|
} else {
|
|
} else {
|
|
- list = searchLogBhv.selectPage(cb -> {
|
|
|
|
|
|
+ list = (EsPagingResultBean<?>) searchLogBhv.selectPage(cb -> {
|
|
cb.paging(pager.getPageSize(), pager.getCurrentPageNumber());
|
|
cb.paging(pager.getPageSize(), pager.getCurrentPageNumber());
|
|
cb.query().addOrderBy_RequestedAt_Desc();
|
|
cb.query().addOrderBy_RequestedAt_Desc();
|
|
- if (StringUtil.isNotBlank(pager.queryId)) {
|
|
|
|
- cb.query().setQueryId_Term(pager.queryId);
|
|
|
|
- }
|
|
|
|
- if (StringUtil.isNotBlank(pager.userSessionId)) {
|
|
|
|
- cb.query().setUserSessionId_Term(pager.userSessionId);
|
|
|
|
- }
|
|
|
|
- if (StringUtil.isNotBlank(pager.accessType)) {
|
|
|
|
- cb.query().setAccessType_Term(pager.accessType);
|
|
|
|
- }
|
|
|
|
- if (StringUtil.isNotBlank(pager.requestedTimeRange)) {
|
|
|
|
- String[] values = pager.requestedTimeRange.split(" - ");
|
|
|
|
- DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
|
|
|
|
- try {
|
|
|
|
- if (values.length > 0) {
|
|
|
|
- cb.query().setRequestedAt_GreaterEqual(parseDateTime(values[0], formatter));
|
|
|
|
- }
|
|
|
|
- if (values.length > 1) {
|
|
|
|
- cb.query().setRequestedAt_LessEqual(LocalDateTime.parse(values[1], formatter));
|
|
|
|
- }
|
|
|
|
- } catch (Exception e) {
|
|
|
|
- if (logger.isDebugEnabled()) {
|
|
|
|
- logger.debug("Failed to parse " + pager.requestedTimeRange, e);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+ createSearchLogCondition(pager, cb);
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
|
|
@@ -164,7 +304,94 @@ public class SearchLogService {
|
|
return list;
|
|
return list;
|
|
}
|
|
}
|
|
|
|
|
|
- protected LocalDateTime parseDateTime(String value, DateTimeFormatter formatter) {
|
|
|
|
|
|
+ private void updatePagerByAgg(final SearchLogPager pager, final int size) {
|
|
|
|
+ pager.setAllPageCount(1);
|
|
|
|
+ pager.setAllRecordCount(size);
|
|
|
|
+ pager.setCurrentPageNumber(1);
|
|
|
|
+ pager.setExistNextPage(false);
|
|
|
|
+ pager.setExistPrePage(false);
|
|
|
|
+ pager.setPageSize(pager.getPageSize());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void createSearchLogCondition(final SearchLogPager pager, final SearchLogCB cb) {
|
|
|
|
+ if (StringUtil.isNotBlank(pager.queryId)) {
|
|
|
|
+ cb.query().setQueryId_Term(pager.queryId);
|
|
|
|
+ }
|
|
|
|
+ if (StringUtil.isNotBlank(pager.userSessionId)) {
|
|
|
|
+ cb.query().setUserSessionId_Term(pager.userSessionId);
|
|
|
|
+ }
|
|
|
|
+ if (StringUtil.isNotBlank(pager.accessType)) {
|
|
|
|
+ cb.query().setAccessType_Term(pager.accessType);
|
|
|
|
+ }
|
|
|
|
+ if (StringUtil.isNotBlank(pager.requestedTimeRange)) {
|
|
|
|
+ final String[] values = pager.requestedTimeRange.split(" - ");
|
|
|
|
+ final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
|
|
|
|
+ try {
|
|
|
|
+ if (values.length > 0) {
|
|
|
|
+ cb.query().setRequestedAt_GreaterEqual(parseDateTime(values[0], formatter));
|
|
|
|
+ }
|
|
|
|
+ if (values.length > 1) {
|
|
|
|
+ cb.query().setRequestedAt_LessEqual(LocalDateTime.parse(values[1], formatter));
|
|
|
|
+ }
|
|
|
|
+ } catch (final Exception e) {
|
|
|
|
+ if (logger.isDebugEnabled()) {
|
|
|
|
+ logger.debug("Failed to parse " + pager.requestedTimeRange, e);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void createFavoriteLogCondition(final SearchLogPager pager, final FavoriteLogCB cb) {
|
|
|
|
+ if (StringUtil.isNotBlank(pager.queryId)) {
|
|
|
|
+ cb.query().setQueryId_Term(pager.queryId);
|
|
|
|
+ }
|
|
|
|
+ if (StringUtil.isNotBlank(pager.userSessionId)) {
|
|
|
|
+ cb.query().setUserInfoId_Term(pager.userSessionId);
|
|
|
|
+ }
|
|
|
|
+ if (StringUtil.isNotBlank(pager.requestedTimeRange)) {
|
|
|
|
+ final String[] values = pager.requestedTimeRange.split(" - ");
|
|
|
|
+ final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
|
|
|
|
+ try {
|
|
|
|
+ if (values.length > 0) {
|
|
|
|
+ cb.query().setCreatedAt_GreaterEqual(LocalDateTime.parse(values[0], formatter));
|
|
|
|
+ }
|
|
|
|
+ if (values.length > 1) {
|
|
|
|
+ cb.query().setCreatedAt_LessEqual(parseDateTime(values[1], formatter));
|
|
|
|
+ }
|
|
|
|
+ } catch (final Exception e) {
|
|
|
|
+ if (logger.isDebugEnabled()) {
|
|
|
|
+ logger.debug("Failed to parse " + pager.requestedTimeRange, e);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void createClickLogCondition(final SearchLogPager pager, final ClickLogCB cb) {
|
|
|
|
+ if (StringUtil.isNotBlank(pager.queryId)) {
|
|
|
|
+ cb.query().setQueryId_Term(pager.queryId);
|
|
|
|
+ }
|
|
|
|
+ if (StringUtil.isNotBlank(pager.userSessionId)) {
|
|
|
|
+ cb.query().setUserSessionId_Term(pager.userSessionId);
|
|
|
|
+ }
|
|
|
|
+ if (StringUtil.isNotBlank(pager.requestedTimeRange)) {
|
|
|
|
+ final String[] values = pager.requestedTimeRange.split(" - ");
|
|
|
|
+ final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
|
|
|
|
+ try {
|
|
|
|
+ if (values.length > 0) {
|
|
|
|
+ cb.query().setRequestedAt_GreaterEqual(LocalDateTime.parse(values[0], formatter));
|
|
|
|
+ }
|
|
|
|
+ if (values.length > 1) {
|
|
|
|
+ cb.query().setRequestedAt_LessEqual(LocalDateTime.parse(values[1], formatter));
|
|
|
|
+ }
|
|
|
|
+ } catch (final Exception e) {
|
|
|
|
+ if (logger.isDebugEnabled()) {
|
|
|
|
+ logger.debug("Failed to parse " + pager.requestedTimeRange, e);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ protected LocalDateTime parseDateTime(final String value, final DateTimeFormatter formatter) {
|
|
return LocalDateTime.parse(value, formatter).atZone(ZoneId.systemDefault()).withZoneSameInstant(ZoneOffset.UTC).toLocalDateTime();
|
|
return LocalDateTime.parse(value, formatter).atZone(ZoneId.systemDefault()).withZoneSameInstant(ZoneOffset.UTC).toLocalDateTime();
|
|
}
|
|
}
|
|
|
|
|