提交 e00eff59 作者: 925993793@qq.com

自定义专题改版接口开发

上级 f0a33843
......@@ -622,6 +622,13 @@ public class InformationController {
return Result.OK();
}
//@PostMapping("/searchForReplaceList")
public Result<?> searchForReplaceList(@RequestBody InfoDataSearchCondition searchCondition){
IPage<SpecialInformation> page = informationService.searchForReplaceList(searchCondition);
return Result.OK(page);
}
/**
* 字符串替换
*
......
......@@ -36,6 +36,7 @@ import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.client.HttpAsyncResponseConsumerFactory;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.text.Text;
import org.elasticsearch.index.query.*;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
......@@ -56,6 +57,8 @@ import org.elasticsearch.search.aggregations.metrics.Cardinality;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.collapse.CollapseBuilder;
import org.elasticsearch.search.fetch.subphase.FetchSourceContext;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;
import org.elasticsearch.search.sort.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -1937,6 +1940,76 @@ public class EsService {
return list;
}
public IPage<SpecialInformation> searchForReplaceList(InfoDataSearchCondition searchCondition) {
List<String> subjectIds = new ArrayList<>();
subjectIds.add(searchCondition.getSubjectId());
String minCreateTime = subjectService.getMinCreateTime(subjectIds);
String[] indexArr = EsIndexUtil.getIndexIntervalYearStr(Constants.SUBJECT_INDEX, minCreateTime);
SearchRequest searchRequest = new SearchRequest(indexArr);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.trackTotalHits(true);
String[] fetchFields = new String[]{"id", "title", "origin", "content"};
searchSourceBuilder.fetchSource(fetchFields, null);
//设置高亮
HighlightBuilder highlightBuilder = new HighlightBuilder();
highlightBuilder.preTags("<font style = 'color:red;'>");
highlightBuilder.postTags("</font>");
List<HighlightBuilder.Field> fields = highlightBuilder.fields();
fields.add(new HighlightBuilder.Field("title").numOfFragments(0));
fields.add(new HighlightBuilder.Field("origin").numOfFragments(0));
fields.add(new HighlightBuilder.Field("content").numOfFragments(0));
searchSourceBuilder.highlighter(highlightBuilder);
//设置分页参数
Integer pageNo = searchCondition.getPageNo();
Integer pageSize = searchCondition.getPageSize();
searchSourceBuilder.from((pageNo - 1) * pageSize);
searchSourceBuilder.size(pageSize);
BoolQueryBuilder boolQuery = buildQuery(searchCondition, subjectIds);
searchSourceBuilder.query(boolQuery);
searchRequest.source(searchSourceBuilder);
IPage<SpecialInformation> pageData = new Page<>();
try {
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
SearchHit[] searchHits = searchResponse.getHits().getHits();
List<SpecialInformation> list = new ArrayList<>();
for (SearchHit hit : searchHits) {
String queryInfo = hit.getSourceAsString();
SpecialInformation info = JSONUtil.toBean(queryInfo, SpecialInformation.class);
Map<String, HighlightField> highlightFields = hit.getHighlightFields();
if (highlightFields.containsKey("title")) {
Text[] titles = highlightFields.get("title").getFragments();
StringBuilder titleHighlight = new StringBuilder();
for (Text title : titles) {
titleHighlight.append(title.string());
}
info.setTitle(titleHighlight.toString());
}
if (highlightFields.containsKey("origin")) {
Text[] origins = highlightFields.get("origin").getFragments();
StringBuilder originHighlight = new StringBuilder();
for (Text origin : origins) {
originHighlight.append(origin.string());
}
info.setOrigin(originHighlight.toString());
}
if (highlightFields.containsKey("content")) {
Text[] contents = highlightFields.get("content").getFragments();
StringBuilder contentHighlight = new StringBuilder();
for (Text content : contents) {
contentHighlight.append(content.string());
}
info.setContent(contentHighlight.toString());
}
list.add(info);
}
pageData = new Page<>(pageNo, pageSize, searchResponse.getHits().getTotalHits().value);
pageData.setRecords(list);
} catch (IOException e) {
e.printStackTrace();
}
return pageData;
}
/**
* term方式聚合分组
*
......@@ -2005,7 +2078,7 @@ public class EsService {
Integer category = searchCondition.getCategory();
boolQuery.must(QueryBuilders.termsQuery("subjectId.keyword", subjectIdList));
//单个专题/事件,默认加上专题/事件的时间范围
if (subjectIdList.size() == 1) {
/*if (subjectIdList.size() == 1) {
String configStartTime = null;
String configEndTime = null;
String id = subjectIdList.get(0);
......@@ -2043,7 +2116,7 @@ public class EsService {
} else {
boolQuery.filter(QueryBuilders.rangeQuery("publishDate").lte(EsDateUtil.esFieldDateFormat(DateUtil.dateToString(new Date()))));
}
}
}*/
}
//高级查询数据处理
BoolQueryBuilder superQuery = buildSuperQuery(searchCondition.getSuperQueryMatchType(), searchCondition.getSuperQueryParams());
......@@ -2084,7 +2157,7 @@ public class EsService {
Integer status = searchCondition.getStatus();
if (status != null) {
if (status == 1) {
boolQuery.must(QueryBuilders.termQuery("checkStatus",0));
boolQuery.must(QueryBuilders.termQuery("checkStatus", 0));
boolQuery.must(QueryBuilders.termQuery("isFreeCheck", 1));
boolQuery.mustNot(QueryBuilders.termQuery("deleteFlag", 1));
} else if (status == 2) {
......
......@@ -308,6 +308,15 @@ public interface InformationService {
void initialData(InfoDataSearchCondition searchCondition);
/**
* 查找替换信息列表
*
* @param searchCondition 资讯检索条件
* @author lkg
* @date 2025/4/24
*/
IPage<SpecialInformation> searchForReplaceList(InfoDataSearchCondition searchCondition);
/**
* 字符串替换
*
* @param searchCondition 资讯检索条件
......
......@@ -1240,6 +1240,11 @@ public class InformationServiceImpl implements InformationService {
}
@Override
public IPage<SpecialInformation> searchForReplaceList(InfoDataSearchCondition searchCondition) {
return esService.searchForReplaceList(searchCondition);
}
@Override
public void charReplace(InfoDataSearchCondition searchCondition) {
SearchWordVO searchWordVO = searchCondition.getSearchWordList().get(0);
Integer searchScope = searchWordVO.getSearchScope();
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论