提交 ccd757d2 作者: 925993793@qq.com

报告数据接口增加专题分析类接口

上级 587589ef
......@@ -10,6 +10,7 @@ import com.zzsn.event.util.DateUtil;
import com.zzsn.event.util.EsDateUtil;
import com.zzsn.event.util.EsIndexUtil;
import com.zzsn.event.util.FieldUtil;
import com.zzsn.event.vo.CountVO;
import com.zzsn.event.vo.es.Label;
import org.apache.commons.lang3.StringUtils;
import org.apache.lucene.search.join.ScoreMode;
......@@ -19,6 +20,16 @@ import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.*;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.Aggregations;
import org.elasticsearch.search.aggregations.BucketOrder;
import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramAggregationBuilder;
import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramInterval;
import org.elasticsearch.search.aggregations.bucket.histogram.Histogram;
import org.elasticsearch.search.aggregations.bucket.histogram.ParsedDateHistogram;
import org.elasticsearch.search.aggregations.bucket.terms.IncludeExclude;
import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.sort.SortOrder;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -87,6 +98,137 @@ public class ReportDataController {
return Result.OK();
}
/**
* 词云图
*
* @param searchCondition 检索条件
* @author lkg
* @date 2025/4/21
*/
@PostMapping("/wordCloud")
public Result<?> wordCloud(@RequestBody SearchCondition searchCondition) {
List<CountVO> list = new ArrayList<>();
Set<String> excludeKeywords = commonService.getExcludeKeywords(searchCondition.getSubjectId());
String[] indexArr = getIndex(searchCondition.getSubjectId());
SearchRequest searchRequest = new SearchRequest(indexArr);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.trackTotalHits(true);
searchSourceBuilder.size(0);
//构建查询语句
BoolQueryBuilder boolQuery = buildQuery(searchCondition);
searchSourceBuilder.query(boolQuery);
TermsAggregationBuilder aggregationBuilder = AggregationBuilders.terms("groupKeywords")
.field("keyWordsList.keyword")
.size(searchCondition.getPageSize())
.order(BucketOrder.count(false));
aggregationBuilder.includeExclude((new IncludeExclude(null, String.join(",", excludeKeywords).split(","))));
searchSourceBuilder.aggregation(aggregationBuilder);
searchRequest.source(searchSourceBuilder);
try {
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
Aggregations aggregations = searchResponse.getAggregations();
Terms groupSource = aggregations.get("groupKeywords");
List<? extends Terms.Bucket> buckets = groupSource.getBuckets();
for (Terms.Bucket bucket : buckets) {
String key = bucket.getKeyAsString();
long count = bucket.getDocCount();
CountVO countVO = new CountVO();
countVO.setName(key);
countVO.setValue(count);
list.add(countVO);
}
} catch (Exception e) {
e.printStackTrace();
}
return Result.OK(list);
}
/**
* 来源分析
*
* @param searchCondition 检索条件
* @author lkg
* @date 2025/4/21
*/
@PostMapping("/originAnalysis")
public Result<List<CountVO>> originAnalysis(@RequestBody SearchCondition searchCondition) {
List<CountVO> list = new ArrayList<>();
String[] indexArr = getIndex(searchCondition.getSubjectId());
SearchRequest searchRequest = new SearchRequest(indexArr);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.trackTotalHits(true);
searchSourceBuilder.size(0);
//构建查询语句
BoolQueryBuilder boolQuery = buildQuery(searchCondition);
searchSourceBuilder.query(boolQuery);
//按来源分组
TermsAggregationBuilder originAggregationBuilder = AggregationBuilders.terms("group_origin")
.field("origin.keyword")
.size(searchCondition.getPageSize())
.order(BucketOrder.count(false)); //返回的最大数据
searchSourceBuilder.aggregation(originAggregationBuilder);
searchRequest.source(searchSourceBuilder);
try {
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
Aggregations aggregations = searchResponse.getAggregations();
Terms groupOrigin = aggregations.get("group_origin");
List<? extends Terms.Bucket> buckets = groupOrigin.getBuckets();
for (Terms.Bucket bucket : buckets) {
CountVO countVO = new CountVO();
countVO.setName(bucket.getKeyAsString());
countVO.setValue(bucket.getDocCount());
list.add(countVO);
}
} catch (Exception e) {
e.printStackTrace();
}
return Result.OK(list);
}
/**
* 趋势分析(按时间分组)
*
* @param searchCondition 检索条件
* @author lkg
* @date 2025/4/21
*/
@PostMapping("/trendAnalysis")
public Result<List<CountVO>> trendAnalysis(@RequestBody SearchCondition searchCondition) {
List<CountVO> list = new ArrayList<>();
String[] indexArr = getIndex(searchCondition.getSubjectId());
SearchRequest searchRequest = new SearchRequest(indexArr);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.trackTotalHits(true);
searchSourceBuilder.size(0);
//构建查询语句
BoolQueryBuilder boolQuery = buildQuery(searchCondition);
searchSourceBuilder.query(boolQuery);
//按时间分组
DateHistogramAggregationBuilder aggregationBuilder = AggregationBuilders.dateHistogram("group_date")
.field("publishDate")
.calendarInterval(DateHistogramInterval.DAY)
.format("yyyy-MM-dd");
searchSourceBuilder.aggregation(aggregationBuilder);
searchRequest.source(searchSourceBuilder);
try {
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
Aggregations aggregations = searchResponse.getAggregations();
ParsedDateHistogram parsedDateHistogram = aggregations.get("group_date");
List<? extends Histogram.Bucket> buckets = parsedDateHistogram.getBuckets();
for (Histogram.Bucket bucket : buckets) {
CountVO countVO = new CountVO();
countVO.setName(bucket.getKeyAsString());
countVO.setValue(bucket.getDocCount());
list.add(countVO);
}
} catch (Exception e) {
e.printStackTrace();
}
return Result.OK(list);
}
/**
* 事件对应专题库的资讯分页列表
......@@ -96,10 +238,7 @@ public class ReportDataController {
* @date 2024/5/6
*/
public List<ReportDataVO> pageList(SearchCondition searchCondition) throws IOException {
List<String> subjectIdList = new ArrayList<>();
subjectIdList.add(searchCondition.getSubjectId());
String minDate = subjectService.getMinCreateTime(subjectIdList);
String[] indexArr = EsIndexUtil.getIndexIntervalYearStr(Constants.SUBJECT_INDEX, minDate);
String[] indexArr = getIndex(searchCondition.getSubjectId());
SearchRequest searchRequest = new SearchRequest(indexArr);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
//默认最大数量是10000,设置为true后,显示准确数量
......@@ -262,7 +401,7 @@ public class ReportDataController {
for (String items : split) {
List<String> ids = Arrays.asList(items.split(","));
NestedQueryBuilder nestedQueryBuilder = QueryBuilders
.nestedQuery("labels", QueryBuilders.termsQuery("labels.relationId",ids), ScoreMode.None);
.nestedQuery("labels", QueryBuilders.termsQuery("labels.relationId", ids), ScoreMode.None);
boolQuery.must(nestedQueryBuilder);
}
}
......@@ -306,4 +445,11 @@ public class ReportDataController {
}
return boolQuery;
}
private String[] getIndex(String subjectId){
List<String> subjectIdList = new ArrayList<>();
subjectIdList.add(subjectId);
String minDate = subjectService.getMinCreateTime(subjectIdList);
return EsIndexUtil.getIndexIntervalYearStr(Constants.SUBJECT_INDEX, minDate);
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论