提交 99500aec 作者: obcy

Merge remote-tracking branch 'origin/event_fusion' into event_fusion

...@@ -10,6 +10,7 @@ import com.zzsn.event.util.DateUtil; ...@@ -10,6 +10,7 @@ import com.zzsn.event.util.DateUtil;
import com.zzsn.event.util.EsDateUtil; import com.zzsn.event.util.EsDateUtil;
import com.zzsn.event.util.EsIndexUtil; import com.zzsn.event.util.EsIndexUtil;
import com.zzsn.event.util.FieldUtil; import com.zzsn.event.util.FieldUtil;
import com.zzsn.event.vo.CountVO;
import com.zzsn.event.vo.es.Label; import com.zzsn.event.vo.es.Label;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.lucene.search.join.ScoreMode; import org.apache.lucene.search.join.ScoreMode;
...@@ -19,6 +20,16 @@ import org.elasticsearch.client.RequestOptions; ...@@ -19,6 +20,16 @@ import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.*; import org.elasticsearch.index.query.*;
import org.elasticsearch.search.SearchHit; 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.builder.SearchSourceBuilder;
import org.elasticsearch.search.sort.SortOrder; import org.elasticsearch.search.sort.SortOrder;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -87,6 +98,137 @@ public class ReportDataController { ...@@ -87,6 +98,137 @@ public class ReportDataController {
return Result.OK(); 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 { ...@@ -96,10 +238,7 @@ public class ReportDataController {
* @date 2024/5/6 * @date 2024/5/6
*/ */
public List<ReportDataVO> pageList(SearchCondition searchCondition) throws IOException { public List<ReportDataVO> pageList(SearchCondition searchCondition) throws IOException {
List<String> subjectIdList = new ArrayList<>(); String[] indexArr = getIndex(searchCondition.getSubjectId());
subjectIdList.add(searchCondition.getSubjectId());
String minDate = subjectService.getMinCreateTime(subjectIdList);
String[] indexArr = EsIndexUtil.getIndexIntervalYearStr(Constants.SUBJECT_INDEX, minDate);
SearchRequest searchRequest = new SearchRequest(indexArr); SearchRequest searchRequest = new SearchRequest(indexArr);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
//默认最大数量是10000,设置为true后,显示准确数量 //默认最大数量是10000,设置为true后,显示准确数量
...@@ -262,7 +401,7 @@ public class ReportDataController { ...@@ -262,7 +401,7 @@ public class ReportDataController {
for (String items : split) { for (String items : split) {
List<String> ids = Arrays.asList(items.split(",")); List<String> ids = Arrays.asList(items.split(","));
NestedQueryBuilder nestedQueryBuilder = QueryBuilders NestedQueryBuilder nestedQueryBuilder = QueryBuilders
.nestedQuery("labels", QueryBuilders.termsQuery("labels.relationId",ids), ScoreMode.None); .nestedQuery("labels", QueryBuilders.termsQuery("labels.relationId", ids), ScoreMode.None);
boolQuery.must(nestedQueryBuilder); boolQuery.must(nestedQueryBuilder);
} }
} }
...@@ -306,4 +445,11 @@ public class ReportDataController { ...@@ -306,4 +445,11 @@ public class ReportDataController {
} }
return boolQuery; 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 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论