提交 994c6705 作者: JQW

推荐资讯

上级 a58dbbc6
package com.zzsn.clb.member.controller;
import java.util.*;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zzsn.clb.member.service.IMemRecommendAsynService;
import com.zzsn.clb.member.service.ISubjectTreeService;
import org.apache.commons.lang.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.jeecg.common.system.vo.LoginUser;
import com.zzsn.clb.member.entity.MemRecommend;
import com.zzsn.clb.member.service.IMemRecommendService;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.system.base.controller.JeecgController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.web.bind.annotation.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
/**
* @Description: 会员-推荐资讯表
* @Author: jeecg-boot
* @Date: 2023-04-03
* @Version: V1.0
*/
@Slf4j
@Api(tags = "会员-推荐资讯表")
@RestController
@RequestMapping("/mach/mem/recommend")
public class MemRecommendController extends JeecgController<MemRecommend, IMemRecommendService> {
@Resource
private IMemRecommendService memRecommendService;
@Resource
IMemRecommendAsynService memRecommendAsynService;
/**
* 分页列表查询
*
* @param memRecommend
* @param pageNo
* @param pageSize
* @param req
* @return
*/
@AutoLog(value = "会员-推荐资讯表-分页列表查询")
@ApiOperation(value = "会员-推荐资讯表-分页列表查询", notes = "会员-推荐资讯表-分页列表查询")
@GetMapping(value = "/list")
public Result<?> queryPageList(MemRecommend memRecommend,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
HttpServletRequest req) {
//获取推荐关键词,标签信息并积分排序
LambdaQueryWrapper<MemRecommend> queryWrapper = new LambdaQueryWrapper<>();
LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
queryWrapper.eq(MemRecommend::getUserId, user.getId());
queryWrapper.gt(MemRecommend::getScore, 0);
queryWrapper.orderByDesc(MemRecommend::getScore);
List<MemRecommend> list = memRecommendService.list(queryWrapper);
List result = new ArrayList();
//计算结束位置
Integer endIndex = pageSize * pageNo;
//根据关键词及标签装配资讯信息
for (MemRecommend recommend : list) {
Map<String, Object> map = new HashMap<>();
Integer size = 3;
String labelId = null;
String keyWord = null;
if (recommend.getType() == 2) {
keyWord = recommend.getKeyWord();
size = 5;
} else {
labelId = recommend.getLabelId();
}
List<Map<String, Object>> newsList = memRecommendService.getNewsList(size, keyWord, labelId);
result.addAll(newsList);
//超过100条退出
if (result.size() >= 100)
break;
}
if (result.size() == 0)
return Result.OK(result);
if (result.size() < endIndex)
endIndex = result.size();
Map<String, Object> map = new HashMap<>();
int pages = (int) Math.ceil(result.size() * 10 * 0.1 / pageSize);
pageNo = pageNo > pages ? pages : pageNo;
map.put("current", pageNo);
map.put("size", pageSize);
map.put("total", result.size());
map.put("pages", pages);
map.put("records", result.subList(pageSize * (pageNo - 1), endIndex));
return Result.OK(map);
}
/**
* 添加
*
* @param memRecommend
* @return
*/
@AutoLog(value = "会员-推荐资讯表-添加")
@ApiOperation(value = "会员-推荐资讯表-添加", notes = "会员-推荐资讯表-添加")
@PostMapping(value = "/add")
public Result<?> add(@RequestBody MemRecommend memRecommend) {
boolean flag = true;
LambdaQueryWrapper<MemRecommend> queryWrapper = new LambdaQueryWrapper<>();
//栏目
if (memRecommend.getType() == 0) {
if (StringUtils.isBlank(memRecommend.getSubjectId()))
return Result.error("专题Id不能为空!");
memRecommend.setScore(1);
memRecommend.setKeyWord(null);
memRecommend.setLabelId(null);
queryWrapper.eq(MemRecommend::getSubjectId, memRecommend.getSubjectId());
} else if (memRecommend.getType() == 1) {//资讯信息
if (StringUtils.isBlank(memRecommend.getSubjectId()))
return Result.error("专题Id不能为空!");
if (StringUtils.isBlank(memRecommend.getLabelId()))
return Result.error("标签Id不能为空!");
memRecommend.setScore(2);
memRecommend.setKeyWord(null);
queryWrapper.eq(MemRecommend::getSubjectId, memRecommend.getSubjectId());
queryWrapper.eq(MemRecommend::getLabelId, memRecommend.getLabelId());
} else if (memRecommend.getType() == 2) {//关键词
if (StringUtils.isBlank(memRecommend.getKeyWord()))
return Result.error("关键词不能为空!");
memRecommend.setScore(5);
memRecommend.setSubjectId(null);
memRecommend.setLabelId(null);
queryWrapper.eq(MemRecommend::getKeyWord, memRecommend.getKeyWord());
} else {
flag = false;
}
if (flag) {
memRecommendAsynService.insert(memRecommend, queryWrapper);
}
return Result.OK("添加成功!");
}
}
package com.zzsn.clb.member.entity;
import java.io.Serializable;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
/**
* @Description: 会员-推荐资讯表
* @Author: jeecg-boot
* @Date: 2023-04-03
* @Version: V1.0
*/
@Data
@TableName("mem_recommend")
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value="mem_recommend对象", description="会员-推荐资讯表")
public class MemRecommend {
/**id*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "id")
private java.lang.String id;
/**1 资讯 2 关键词*/
@Excel(name = "1 资讯 2 关键词", width = 15)
@ApiModelProperty(value = "0 专题 1 资讯 2 关键词")
private java.lang.Integer type;
/**分数*/
@Excel(name = "分数", width = 15)
@ApiModelProperty(value = "分数")
private java.lang.Integer score;
/**用户Id*/
@Excel(name = "用户Id", width = 15)
@ApiModelProperty(value = "用户Id")
private java.lang.String userId;
/**关键词*/
@Excel(name = "关键词", width = 15)
@ApiModelProperty(value = "关键词")
private java.lang.String keyWord;
/**专题Id*/
@Excel(name = "专题Id", width = 15)
@ApiModelProperty(value = "专题Id")
private java.lang.String subjectId;
/**标签id*/
@Excel(name = "标签id", width = 15)
@ApiModelProperty(value = "标签id")
private java.lang.String labelId;
}
package com.zzsn.clb.member.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.zzsn.clb.member.entity.MemRecommend;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Update;
/**
* @Description: 会员-推荐资讯表
* @Author: jeecg-boot
* @Date: 2023-04-03
* @Version: V1.0
*/
public interface MemRecommendMapper extends BaseMapper<MemRecommend> {
@Update("update mem_recommend set score=score+#{score} where subject_id=#{subjectId} and user_id=#{userId}")
boolean updateScoreBySubjectId(@Param("subjectId") String subjectId, @Param("userId") String userId, @Param("score") Integer score);
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zzsn.clb.member.mapper.MemRecommendMapper">
</mapper>
\ No newline at end of file
package com.zzsn.clb.member.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zzsn.clb.member.entity.MemRecommend;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
import java.util.Map;
/**
* @Description: 会员-推荐资讯表
* @Author: jeecg-boot
* @Date: 2023-04-03
* @Version: V1.0
*/
public interface IMemRecommendService extends IService<MemRecommend> {
/***
* 获取推荐信息
* @param size
* @param keyWord
* @param labelId
* @return
*/
List<Map<String, Object>> getNewsList(Integer size, String keyWord, String labelId);
/***
* 根据subjectId更新用户积分
* @param subjectId
* @param userId
* @param score
*/
void updateScoreBySubjectId(String subjectId, String userId, Integer score);
}
package com.zzsn.clb.member.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zzsn.clb.member.entity.MemRecommend;
import com.zzsn.clb.member.mapper.MemRecommendMapper;
import com.zzsn.clb.member.mapper.SubjectMapper;
import com.zzsn.clb.member.service.IMemRecommendService;
import com.zzsn.clb.member.service.ISubjectTreeService;
import com.zzsn.common.Constants;
import org.apache.commons.lang.StringUtils;
import org.apache.lucene.search.join.ScoreMode;
import org.apache.shiro.SecurityUtils;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.Strings;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.NestedQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.sort.SortOrder;
import org.jeecg.common.system.vo.LoginUser;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @Description: 会员-推荐资讯表
* @Author: jeecg-boot
* @Date: 2023-04-03
* @Version: V1.0
*/
@Service
public class MemRecommendServiceImpl extends ServiceImpl<MemRecommendMapper, MemRecommend> implements IMemRecommendService {
@Resource
private RestHighLevelClient client;
@Override
public List<Map<String, Object>> getNewsList(Integer size, String keyWord, String labelId) {
return getSubjectArticleList(1, size, keyWord, labelId);
}
@Override
public void updateScoreBySubjectId(String subjectId, String userId, Integer score) {
this.getBaseMapper().updateScoreBySubjectId(subjectId, userId, score);
}
/***
* @param current
* @param size
* @param keyWord
* @param labelId
* @return
*/
private List<Map<String, Object>> getSubjectArticleList(Integer current, Integer size, String keyWord, String labelId) {
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
BoolQueryBuilder boolBuilder = (BoolQueryBuilder) searchSourceBuilder.query();
if (boolBuilder == null) {
boolBuilder = QueryBuilders.boolQuery();
}
NestedQueryBuilder nestedQueryBuilder = null;
//标签查询
if (StringUtils.isNotBlank(labelId)) {
nestedQueryBuilder = QueryBuilders
.nestedQuery("labels", QueryBuilders.termsQuery("labels.relationId", labelId), ScoreMode.None);
boolBuilder.must(nestedQueryBuilder);
}
//关键词查询
if (StringUtils.isNotBlank(keyWord)) {
boolBuilder.must(QueryBuilders.matchPhraseQuery("content", keyWord));
}
boolBuilder.must(QueryBuilders.termQuery("checkStatus", 1));// 0 未审核 1 审核 ?
boolBuilder.must(QueryBuilders.termQuery("deleteFlag", 0));//未删除
//分页
searchSourceBuilder.from((current - 1) * size).size(size);
searchSourceBuilder.sort("publishDate", SortOrder.DESC);
String[] includes = new String[]{"title", "publishDate", "subjectId", "id", "origin", "subjectName"};
String[] excludes = Strings.EMPTY_ARRAY;
searchSourceBuilder.fetchSource(includes, excludes);
searchSourceBuilder.query(boolBuilder);
return getSubjectArticleList(searchSourceBuilder);
}
/***
* 执行专题信息查询操作
* @param searchSourceBuilder
* @return
*/
private List<Map<String, Object>> getSubjectArticleList(SearchSourceBuilder searchSourceBuilder) {
try {
SearchRequest searchRequest = new SearchRequest(Constants.ES_DATA_FOR_SUBJECT);
searchSourceBuilder.trackTotalHits(true);
searchRequest.source(searchSourceBuilder);
SearchResponse search = client.search(searchRequest, RequestOptions.DEFAULT);
List<Map<String, Object>> records = new ArrayList<>();
for (SearchHit documentFields : search.getHits().getHits()) {
records.add(documentFields.getSourceAsMap());
}
return records;
} catch (IOException e) {
log.error("查询es专题资讯数据失败,e:{}", e);
}
return null;
}
}
package com.zzsn.clb.web.service;
import java.util.List;
import java.util.Map;
public interface ISubjectService {
/***
* 专题数据统计
* @param type 本月-month 季度-quarter 本年-year
* @param size 返回数据条数
* @param subjectType 专题类型 通用-1 事件-2
* @return
*/
public List<Map<String,Object>> getSubjectCollect(String type,Integer size, Integer subjectType);
/***
* 专题趋势
* @param queryBgDate 开始日期
* @param queryEndate 结束日期
* @return
*/
List<Map<String, Object>> getDaySubjectTrend(String queryBgDate, String queryEndate);
/***
* 舆情走势
* @param queryBgDate 开始日期
* @param queryEndate 结束日期
* @param type 1-正面 2-负面
* @return
*/
List<Map<String, Object>> getPubliOpinionTrend(String queryBgDate, String queryEndate, Integer type);
}
package com.zzsn.clb.web.service.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zzsn.clb.fegin.IServiceProjectClient;
import com.zzsn.clb.web.service.ISubjectService;
import com.zzsn.common.Constants;
import com.zzsn.utils.UDateUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.lucene.search.join.ScoreMode;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.NestedQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.aggregations.AggregationBuilders;
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.terms.Terms;
import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.collapse.CollapseBuilder;
import org.elasticsearch.search.sort.SortOrder;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.util.DateUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.*;
import java.util.stream.Collectors;
@Slf4j
@Service
public class SubjectServiceImpl implements ISubjectService {
@Resource
private RestHighLevelClient client;
@Resource
IServiceProjectClient serviceProjectClient;
@Override
public List<Map<String, Object>> getSubjectCollect(String type, Integer size, Integer subjectType) {
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
BoolQueryBuilder boolBuilder = (BoolQueryBuilder) searchSourceBuilder.query();
if (boolBuilder == null) {
boolBuilder = QueryBuilders.boolQuery();
}
//开始日期
String queryBgDate = null;
//结束日期
String queryEndate = null;
String timeFiled = "publishDate";
Date now = new Date();
//如果是本月
if (type.equals("month")) {
queryBgDate = DateUtils.formatDate(new Date(), "yyyy-MM-01");
queryEndate = DateUtils.formatDate(DateUtils.getTimesMonthNight(), "yyyy-MM-dd");
}
//如果是季度
if (type.equals("quarter")) {
queryBgDate = DateUtils.formatDate(UDateUtils.getCurrentQuarterStartTime(), "yyyy-MM-01");
queryEndate = DateUtils.formatDate(UDateUtils.getCurrentQuarterEndTime(), "yyyy-MM-dd");
}
//如果是本年
if (type.equals("year")) {
queryBgDate = DateUtils.formatDate(new Date(), "yyyy-01-01");
queryEndate = DateUtils.formatDate(new Date(), "yyyy-12-31");
}
if (queryBgDate == null)
return null;
boolBuilder.must(QueryBuilders.rangeQuery(timeFiled).gte(queryBgDate));
boolBuilder.must(QueryBuilders.rangeQuery(timeFiled).lt(queryEndate));
boolBuilder.must(QueryBuilders.termQuery("checkStatus", 1));// 0 未审核 1 审核 ?
boolBuilder.must(QueryBuilders.termQuery("deleteFlag", 0));//未删除
JSONObject jo = new JSONObject();
jo.put("subjectType", subjectType);
Result<JSONObject> result = serviceProjectClient.getSubjectList(jo, 1, 200);
if (!result.isSuccess())
return null;
JSONArray jsonArray = result.getResult().getJSONArray("records");
boolBuilder.must(QueryBuilders.termsQuery("subjectId", jsonArray.stream().map(m -> ((Map) m).get("id")).collect(Collectors.toList())));
searchSourceBuilder.query(boolBuilder);
TermsAggregationBuilder aggregation = AggregationBuilders
//别名
.terms("num")
//聚合字段名
.field("subjectId.keyword")
//降序
.order(BucketOrder.count(false))
//聚合结果数据量,默认只返回前十条
.size(size);
searchSourceBuilder.aggregation(aggregation);
Terms terms = (Terms) getEsList(searchSourceBuilder, "num");
List<Map<String, Object>> records = new ArrayList<>();
for (Terms.Bucket buck : terms.getBuckets()) {
records.add(new HashMap<String, Object>() {
{
put("name", getSubjectName(jsonArray, buck.getKeyAsString()));
put("num", buck.getDocCount());
}
});
}
return records;
}
public List<Map<String, Object>> getDaySubjectTrend(String queryBgDate, String queryEndate) {
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
BoolQueryBuilder boolBuilder = (BoolQueryBuilder) searchSourceBuilder.query();
if (boolBuilder == null) {
boolBuilder = QueryBuilders.boolQuery();
}
String today = DateUtils.formatDate(DateUtils.getTimesMonthNight(), "yyyy-MM-dd");
if (StringUtils.isBlank(queryBgDate)) {
queryBgDate = today;
}
if (StringUtils.isBlank(queryEndate)) {
queryEndate = today;
}
String timeFiled = "publishDate";
boolBuilder.must(QueryBuilders.rangeQuery(timeFiled).gte(queryBgDate));
boolBuilder.must(QueryBuilders.rangeQuery(timeFiled).lte(queryEndate));
boolBuilder.must(QueryBuilders.termQuery("checkStatus", 1));// 0 未审核 1 审核 ?
boolBuilder.must(QueryBuilders.termQuery("deleteFlag", 0));//未删除
JSONObject jo = new JSONObject();
jo.put("subjectType", 1);
Result<JSONObject> result = serviceProjectClient.getSubjectList(jo, 1, 200);
if (!result.isSuccess())
return null;
JSONArray jsonArray = result.getResult().getJSONArray("records");
boolBuilder.must(QueryBuilders.termsQuery(
"subjectId", jsonArray.stream().map(m -> ((Map) m).get("id")).collect(Collectors.toList())));
searchSourceBuilder.query(boolBuilder);
DateHistogramAggregationBuilder aggregation = AggregationBuilders
.dateHistogram("publishDate")
.field("publishDate")
.format("yyyy-MM-dd")
.fixedInterval(DateHistogramInterval.DAY);
aggregation.subAggregation(AggregationBuilders
//别名
.terms("num")
//聚合字段名
.field("subjectId.keyword")
//降序
.order(BucketOrder.count(false))
//聚合结果数据量,默认只返回前十条
.size(100));
searchSourceBuilder.aggregation(aggregation);
Histogram terms = (Histogram) getEsList(searchSourceBuilder, "publishDate");
List<Map<String, Object>> records = new ArrayList<>();
for (Histogram.Bucket buckDate : terms.getBuckets()) {
Terms byAgeAggregation = buckDate.getAggregations().get("num");
for (Terms.Bucket buck : byAgeAggregation.getBuckets()) {
records.add(new HashMap<String, Object>() {
{
put("name", getSubjectName(jsonArray, buck.getKeyAsString()));
put("date", buckDate.getKeyAsString());
put("num", buck.getDocCount());
}
});
}
}
return records;
}
/***
* 执行专题信息查询操作
* @param searchSourceBuilder
* @return
*/
private Object getEsList(SearchSourceBuilder searchSourceBuilder, String groupName) {
try {
SearchRequest searchRequest = new SearchRequest(Constants.ES_DATA_FOR_SUBJECT);
searchSourceBuilder.trackTotalHits(true);
searchRequest.source(searchSourceBuilder);
SearchResponse search = client.search(searchRequest, RequestOptions.DEFAULT);
return search.getAggregations().get(groupName);
} catch (IOException e) {
log.error("查询es专题资讯数据失败,e:{}", e);
}
return null;
}
private String getSubjectName(JSONArray records, String id) {
Optional<Object> model = records.stream().filter(f -> ((Map) f).get("id").equals(id)).findFirst();
if (model.isPresent())
return ((Map) model.get()).get("subjectName").toString();
else
return "";
}
public List<Map<String, Object>> getPubliOpinionTrend(String queryBgDate, String queryEndate, Integer type) {
String today = DateUtils.formatDate(DateUtils.getTimesMonthNight(), "yyyy-MM-dd");
if (StringUtils.isBlank(queryBgDate)) {
queryBgDate = today;
}
if (StringUtils.isBlank(queryEndate)) {
queryEndate = today;
}
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
BoolQueryBuilder boolBuilder = (BoolQueryBuilder) searchSourceBuilder.query();
if (boolBuilder == null) {
boolBuilder = QueryBuilders.boolQuery();
}
String timeFiled = "publishDate";
boolBuilder.must(QueryBuilders.rangeQuery(timeFiled).gte(queryBgDate));
boolBuilder.must(QueryBuilders.rangeQuery(timeFiled).lte(queryEndate));
NestedQueryBuilder nestedQueryBuilder = null;
if (type == 1)//正面
nestedQueryBuilder = QueryBuilders
.nestedQuery("labels", QueryBuilders.termsQuery("labels.relationId", "1631119657360347137"), ScoreMode.None);
else if (type == 2)//负面
nestedQueryBuilder = QueryBuilders
.nestedQuery("labels", QueryBuilders.termsQuery("labels.relationId", "1631119691724279810"), ScoreMode.None);
else
return null;
boolBuilder.must(nestedQueryBuilder);
boolBuilder.must(QueryBuilders.termQuery("checkStatus", 1));// 0 未审核 1 审核 ?
boolBuilder.must(QueryBuilders.termQuery("deleteFlag", 0));//未删除
searchSourceBuilder.query(boolBuilder);
DateHistogramAggregationBuilder aggregation = AggregationBuilders
.dateHistogram("publishDate")
.field("publishDate")
.format("yyyy-MM-dd")
.fixedInterval(DateHistogramInterval.DAY);
searchSourceBuilder.aggregation(aggregation);
List<Map<String, Object>> records = new ArrayList<>();
Histogram byAgeAggregation = (Histogram) getEsList(searchSourceBuilder, "publishDate");
for (Histogram.Bucket buck : byAgeAggregation.getBuckets()) {
records.add(new HashMap<String, Object>() {
{
put("date", buck.getKeyAsString());
put("num", buck.getDocCount());
}
});
}
return records;
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论