Commit 66a74941 by 陈健智

原发追溯-扩大原发追溯

parent 78fec902
......@@ -584,6 +584,12 @@ public class AppArticleController extends BaseController {
return ResponseResult.success(markDataService.getWholeSearchArticleList(dto));
}
@ApiOperation("原发溯源-扩大追溯范围")
@PostMapping("/search-whole/origin/expand")
public ResponseResult expandOriginRange(@RequestBody MarkSearchDTO dto) {
return ResponseResult.success(markDataService.expandOriginRange(dto));
}
private boolean checkMTagIllegal(StringBuilder mtag) {
List<MarkerTag> hitTags = projectService.getProjectById(UserThreadLocal.getProjectId()).getHitTags();
if (!Tools.isEmpty(hitTags)) {
......
......@@ -142,6 +142,12 @@ public class MarkSearchDTO {
private String keyword;
/**
* 多个关键字
*/
@ApiModelProperty(value = "多个关键字")
private List<String> keywordList;
/**
* 渠道关键词
*/
@ApiModelProperty(value = "渠道关键词")
......
......@@ -750,4 +750,11 @@ public interface MarkDataService {
* @return
*/
PageVO<JSONObject> getWholeSearchArticleList(MarkSearchDTO dto);
/**
* 原发溯源-扩大追溯范围
* @param dto
* @return
*/
List<String> expandOriginRange(MarkSearchDTO dto);
}
......@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
import com.hankcs.hanlp.HanLP;
import com.zhiwei.base.category.ClassB;
import com.zhiwei.base.entity.subclass.mark.MarkInfo;
import com.zhiwei.brandkbs2.auth.UserThreadLocal;
......@@ -653,7 +654,8 @@ public class MarkDataServiceImpl implements MarkDataService {
contendOptional.ifPresent(contend -> markSearchDTO.setLinkedGroupId(contend.getBrandLinkedGroupId()));
}
// gid
String gid = redisUtil.get(RedisUtil.getNonManualProjectMarkMaxGidKey(UserThreadLocal.getProjectId(), markSearchDTO.getPlanId(), UserThreadLocal.getUserId()));
String key = RedisUtil.getNonManualProjectMarkMaxGidKey(projectId, markSearchDTO.getPlanId(), UserThreadLocal.getUserId());
String gid = redisUtil.get(key);
if (Objects.isNull(gid)) {
markSearchDTO.setGid(-1L);
}else {
......@@ -3551,6 +3553,34 @@ public class MarkDataServiceImpl implements MarkDataService {
return null;
}
@Override
public List<String> expandOriginRange(MarkSearchDTO dto) {
try {
// 默认近一个月
dto.setEndTime(System.currentTimeMillis());
dto.setStartTime(dto.getEndTime() - Constant.ONE_MONTH);
String[] indexes = esClientDao.getAllIndexes(dto.getStartTime(), dto.getEndTime());
BoolQueryBuilder query = QueryBuilders.boolQuery();
// nlp分词
String keyword = HanLP.segment(Tools.filterSpecialCharacter(dto.getKeyword())).stream().map(s -> s.word).distinct().collect(Collectors.joining(" "));
query.must(EsQueryTools.assembleNormalKeywordQuery(keyword, new String[]{GenericAttribute.ES_IND_FULL_TEXT}));
// time
query.must(QueryBuilders.rangeQuery(GenericAttribute.ES_TIME).gte(dto.getStartTime()).lte(dto.getEndTime()));
// 按score排序
FieldSortBuilder sort = SortBuilders.fieldSort("_score").order(SortOrder.DESC);
SearchHits hits = esClientDao.searchHits(indexes, query, null, null, sort, 0, 1000, null);
if (0 == hits.getTotalHits().value){
return Collections.emptyList();
}
// 取top5
return Arrays.stream(hits.getHits()).map(hit -> Tools.getBaseFromEsMap(hit.getSourceAsMap()).getTitle())
.filter(Objects::nonNull).distinct().limit(5).collect(Collectors.toList());
}catch (Exception e){
ExceptionCast.cast(CommonCodeEnum.FAIL, "原发溯源-扩大溯源范围异常expandOriginRange-", e);
}
return Collections.emptyList();
}
/**
* 原发溯源大库es查询
* @param dto
......@@ -3559,32 +3589,48 @@ public class MarkDataServiceImpl implements MarkDataService {
private BoolQueryBuilder getAllIndexSearchOriginQuery(MarkSearchDTO dto) {
BoolQueryBuilder query = QueryBuilders.boolQuery();
// time
dto.setEndTime(System.currentTimeMillis());
dto.setStartTime(dto.getEndTime() - Constant.ONE_MONTH);
if (Objects.isNull(dto.getStartTime()) || Objects.isNull(dto.getEndTime())) {
dto.setEndTime(System.currentTimeMillis());
dto.setStartTime(dto.getEndTime() - Constant.ONE_MONTH);
}
query.must(QueryBuilders.rangeQuery("time").gte(dto.getStartTime()).lte(dto.getEndTime()));
String keyword = dto.getKeyword();
// 特殊符号、数字替换空格
String processedKeyword = Tools.canonicalKeyword(keyword.replaceAll(ORIGIN_SEARCH_PATTERN, " "));
// keyword
String[] fieldSearch = new String[]{GenericAttribute.ES_IND_FULL_TEXT};
BoolQueryBuilder keywordQuery = QueryBuilders.boolQuery();
// keyword条件一: 空格为且条件
if (StringUtils.isNotEmpty(processedKeyword)) {
BoolQueryBuilder keywordQuery1 = QueryBuilders.boolQuery();
String[] words = processedKeyword.split(" +");
for (int i = 0; i < words.length; i++) {
BoolQueryBuilder wordQuery = QueryBuilders.boolQuery();
if (i != words.length - 1) {
keywordQuery1.must(wordQuery.must(QueryBuilders.matchPhraseQuery(GenericAttribute.ES_IND_FULL_TEXT, words[i])));
} else {
keywordQuery1.must(wordQuery.must(QueryBuilders.matchPhrasePrefixQuery(GenericAttribute.ES_IND_FULL_TEXT, words[i])));
}
if (!Tools.isEmpty(dto.getKeywordList())) {
for (String keyword : dto.getKeywordList()) {
keywordQuery.should(QueryBuilders.matchPhrasePrefixQuery(GenericAttribute.ES_IND_FULL_TEXT, keyword));
// 关键词 数字符号替换后重组query
keywordQuery.should(EsQueryTools.assembleNormalKeywordQuery(Tools.canonicalKeyword(keyword.replaceAll(ORIGIN_SEARCH_PATTERN, " ")), fieldSearch));
}
keywordQuery.should(keywordQuery1);
}
// keyword条件二
BoolQueryBuilder keywordQuery2 = QueryBuilders.boolQuery();
keywordQuery2.must(QueryBuilders.matchPhrasePrefixQuery(GenericAttribute.ES_IND_FULL_TEXT, keyword));
// 两个keyword条件满足一个即可
keywordQuery.should(keywordQuery2).minimumShouldMatch(1);
} else {
keywordQuery.should(QueryBuilders.matchPhrasePrefixQuery(GenericAttribute.ES_IND_FULL_TEXT, dto.getKeyword()));
// 关键词 数字符号替换后重组query
keywordQuery.should(EsQueryTools.assembleNormalKeywordQuery(Tools.canonicalKeyword(dto.getKeyword().replaceAll(ORIGIN_SEARCH_PATTERN, " ")), fieldSearch));
}
// String keyword = dto.getKeyword();
// // 特殊符号、数字替换空格
// String processedKeyword = Tools.canonicalKeyword(keyword.replaceAll(ORIGIN_SEARCH_PATTERN, " "));
//// BoolQueryBuilder keywordQuery = QueryBuilders.boolQuery();
// // keyword条件一: 空格为且条件
// if (StringUtils.isNotEmpty(processedKeyword)) {
// BoolQueryBuilder keywordQuery1 = QueryBuilders.boolQuery();
// String[] words = processedKeyword.split(" +");
// for (int i = 0; i < words.length; i++) {
// BoolQueryBuilder wordQuery = QueryBuilders.boolQuery();
// if (i != words.length - 1) {
// keywordQuery1.must(wordQuery.must(QueryBuilders.matchPhraseQuery(GenericAttribute.ES_IND_FULL_TEXT, words[i])));
// } else {
// keywordQuery1.must(wordQuery.must(QueryBuilders.matchPhrasePrefixQuery(GenericAttribute.ES_IND_FULL_TEXT, words[i])));
// }
// }
// keywordQuery.should(keywordQuery1);
// }
// // keyword条件二
// BoolQueryBuilder keywordQuery2 = QueryBuilders.boolQuery();
// keywordQuery2.must(QueryBuilders.matchPhrasePrefixQuery(GenericAttribute.ES_IND_FULL_TEXT, keyword));
// // 两个keyword条件满足一个即可
// keywordQuery.should(keywordQuery2).minimumShouldMatch(1);
query.must(keywordQuery);
// platform
BoolQueryBuilder platformQuery = EsQueryTools.assemblePlatformQuery(GlobalPojo.PLATFORMS);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment