Commit 66a74941 by 陈健智

原发追溯-扩大原发追溯

parent 78fec902
...@@ -584,6 +584,12 @@ public class AppArticleController extends BaseController { ...@@ -584,6 +584,12 @@ public class AppArticleController extends BaseController {
return ResponseResult.success(markDataService.getWholeSearchArticleList(dto)); 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) { private boolean checkMTagIllegal(StringBuilder mtag) {
List<MarkerTag> hitTags = projectService.getProjectById(UserThreadLocal.getProjectId()).getHitTags(); List<MarkerTag> hitTags = projectService.getProjectById(UserThreadLocal.getProjectId()).getHitTags();
if (!Tools.isEmpty(hitTags)) { if (!Tools.isEmpty(hitTags)) {
......
...@@ -142,6 +142,12 @@ public class MarkSearchDTO { ...@@ -142,6 +142,12 @@ public class MarkSearchDTO {
private String keyword; private String keyword;
/** /**
* 多个关键字
*/
@ApiModelProperty(value = "多个关键字")
private List<String> keywordList;
/**
* 渠道关键词 * 渠道关键词
*/ */
@ApiModelProperty(value = "渠道关键词") @ApiModelProperty(value = "渠道关键词")
......
...@@ -750,4 +750,11 @@ public interface MarkDataService { ...@@ -750,4 +750,11 @@ public interface MarkDataService {
* @return * @return
*/ */
PageVO<JSONObject> getWholeSearchArticleList(MarkSearchDTO dto); PageVO<JSONObject> getWholeSearchArticleList(MarkSearchDTO dto);
/**
* 原发溯源-扩大追溯范围
* @param dto
* @return
*/
List<String> expandOriginRange(MarkSearchDTO dto);
} }
...@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONArray; ...@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.hankcs.hanlp.HanLP;
import com.zhiwei.base.category.ClassB; import com.zhiwei.base.category.ClassB;
import com.zhiwei.base.entity.subclass.mark.MarkInfo; import com.zhiwei.base.entity.subclass.mark.MarkInfo;
import com.zhiwei.brandkbs2.auth.UserThreadLocal; import com.zhiwei.brandkbs2.auth.UserThreadLocal;
...@@ -653,7 +654,8 @@ public class MarkDataServiceImpl implements MarkDataService { ...@@ -653,7 +654,8 @@ public class MarkDataServiceImpl implements MarkDataService {
contendOptional.ifPresent(contend -> markSearchDTO.setLinkedGroupId(contend.getBrandLinkedGroupId())); contendOptional.ifPresent(contend -> markSearchDTO.setLinkedGroupId(contend.getBrandLinkedGroupId()));
} }
// gid // 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)) { if (Objects.isNull(gid)) {
markSearchDTO.setGid(-1L); markSearchDTO.setGid(-1L);
}else { }else {
...@@ -3551,6 +3553,34 @@ public class MarkDataServiceImpl implements MarkDataService { ...@@ -3551,6 +3553,34 @@ public class MarkDataServiceImpl implements MarkDataService {
return null; 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查询 * 原发溯源大库es查询
* @param dto * @param dto
...@@ -3559,32 +3589,48 @@ public class MarkDataServiceImpl implements MarkDataService { ...@@ -3559,32 +3589,48 @@ public class MarkDataServiceImpl implements MarkDataService {
private BoolQueryBuilder getAllIndexSearchOriginQuery(MarkSearchDTO dto) { private BoolQueryBuilder getAllIndexSearchOriginQuery(MarkSearchDTO dto) {
BoolQueryBuilder query = QueryBuilders.boolQuery(); BoolQueryBuilder query = QueryBuilders.boolQuery();
// time // time
dto.setEndTime(System.currentTimeMillis()); if (Objects.isNull(dto.getStartTime()) || Objects.isNull(dto.getEndTime())) {
dto.setStartTime(dto.getEndTime() - Constant.ONE_MONTH); dto.setEndTime(System.currentTimeMillis());
dto.setStartTime(dto.getEndTime() - Constant.ONE_MONTH);
}
query.must(QueryBuilders.rangeQuery("time").gte(dto.getStartTime()).lte(dto.getEndTime())); query.must(QueryBuilders.rangeQuery("time").gte(dto.getStartTime()).lte(dto.getEndTime()));
String keyword = dto.getKeyword(); // keyword
// 特殊符号、数字替换空格 String[] fieldSearch = new String[]{GenericAttribute.ES_IND_FULL_TEXT};
String processedKeyword = Tools.canonicalKeyword(keyword.replaceAll(ORIGIN_SEARCH_PATTERN, " "));
BoolQueryBuilder keywordQuery = QueryBuilders.boolQuery(); BoolQueryBuilder keywordQuery = QueryBuilders.boolQuery();
// keyword条件一: 空格为且条件 if (!Tools.isEmpty(dto.getKeywordList())) {
if (StringUtils.isNotEmpty(processedKeyword)) { for (String keyword : dto.getKeywordList()) {
BoolQueryBuilder keywordQuery1 = QueryBuilders.boolQuery(); keywordQuery.should(QueryBuilders.matchPhrasePrefixQuery(GenericAttribute.ES_IND_FULL_TEXT, keyword));
String[] words = processedKeyword.split(" +"); // 关键词 数字符号替换后重组query
for (int i = 0; i < words.length; i++) { keywordQuery.should(EsQueryTools.assembleNormalKeywordQuery(Tools.canonicalKeyword(keyword.replaceAll(ORIGIN_SEARCH_PATTERN, " ")), fieldSearch));
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); } else {
} keywordQuery.should(QueryBuilders.matchPhrasePrefixQuery(GenericAttribute.ES_IND_FULL_TEXT, dto.getKeyword()));
// keyword条件二 // 关键词 数字符号替换后重组query
BoolQueryBuilder keywordQuery2 = QueryBuilders.boolQuery(); keywordQuery.should(EsQueryTools.assembleNormalKeywordQuery(Tools.canonicalKeyword(dto.getKeyword().replaceAll(ORIGIN_SEARCH_PATTERN, " ")), fieldSearch));
keywordQuery2.must(QueryBuilders.matchPhrasePrefixQuery(GenericAttribute.ES_IND_FULL_TEXT, keyword)); }
// 两个keyword条件满足一个即可 // String keyword = dto.getKeyword();
keywordQuery.should(keywordQuery2).minimumShouldMatch(1); // // 特殊符号、数字替换空格
// 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); query.must(keywordQuery);
// platform // platform
BoolQueryBuilder platformQuery = EsQueryTools.assemblePlatformQuery(GlobalPojo.PLATFORMS); 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