提交 e00eff59 作者: 925993793@qq.com

自定义专题改版接口开发

上级 f0a33843
...@@ -622,6 +622,13 @@ public class InformationController { ...@@ -622,6 +622,13 @@ public class InformationController {
return Result.OK(); 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; ...@@ -36,6 +36,7 @@ import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.client.HttpAsyncResponseConsumerFactory; import org.elasticsearch.client.HttpAsyncResponseConsumerFactory;
import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.text.Text;
import org.elasticsearch.index.query.*; import org.elasticsearch.index.query.*;
import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits; import org.elasticsearch.search.SearchHits;
...@@ -56,6 +57,8 @@ import org.elasticsearch.search.aggregations.metrics.Cardinality; ...@@ -56,6 +57,8 @@ import org.elasticsearch.search.aggregations.metrics.Cardinality;
import org.elasticsearch.search.builder.SearchSourceBuilder; import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.collapse.CollapseBuilder; import org.elasticsearch.search.collapse.CollapseBuilder;
import org.elasticsearch.search.fetch.subphase.FetchSourceContext; 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.elasticsearch.search.sort.*;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -1937,6 +1940,76 @@ public class EsService { ...@@ -1937,6 +1940,76 @@ public class EsService {
return list; 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方式聚合分组 * term方式聚合分组
* *
...@@ -2005,7 +2078,7 @@ public class EsService { ...@@ -2005,7 +2078,7 @@ public class EsService {
Integer category = searchCondition.getCategory(); Integer category = searchCondition.getCategory();
boolQuery.must(QueryBuilders.termsQuery("subjectId.keyword", subjectIdList)); boolQuery.must(QueryBuilders.termsQuery("subjectId.keyword", subjectIdList));
//单个专题/事件,默认加上专题/事件的时间范围 //单个专题/事件,默认加上专题/事件的时间范围
if (subjectIdList.size() == 1) { /*if (subjectIdList.size() == 1) {
String configStartTime = null; String configStartTime = null;
String configEndTime = null; String configEndTime = null;
String id = subjectIdList.get(0); String id = subjectIdList.get(0);
...@@ -2043,7 +2116,7 @@ public class EsService { ...@@ -2043,7 +2116,7 @@ public class EsService {
} else { } else {
boolQuery.filter(QueryBuilders.rangeQuery("publishDate").lte(EsDateUtil.esFieldDateFormat(DateUtil.dateToString(new Date())))); boolQuery.filter(QueryBuilders.rangeQuery("publishDate").lte(EsDateUtil.esFieldDateFormat(DateUtil.dateToString(new Date()))));
} }
} }*/
} }
//高级查询数据处理 //高级查询数据处理
BoolQueryBuilder superQuery = buildSuperQuery(searchCondition.getSuperQueryMatchType(), searchCondition.getSuperQueryParams()); BoolQueryBuilder superQuery = buildSuperQuery(searchCondition.getSuperQueryMatchType(), searchCondition.getSuperQueryParams());
...@@ -2084,7 +2157,7 @@ public class EsService { ...@@ -2084,7 +2157,7 @@ public class EsService {
Integer status = searchCondition.getStatus(); Integer status = searchCondition.getStatus();
if (status != null) { if (status != null) {
if (status == 1) { if (status == 1) {
boolQuery.must(QueryBuilders.termQuery("checkStatus",0)); boolQuery.must(QueryBuilders.termQuery("checkStatus", 0));
boolQuery.must(QueryBuilders.termQuery("isFreeCheck", 1)); boolQuery.must(QueryBuilders.termQuery("isFreeCheck", 1));
boolQuery.mustNot(QueryBuilders.termQuery("deleteFlag", 1)); boolQuery.mustNot(QueryBuilders.termQuery("deleteFlag", 1));
} else if (status == 2) { } else if (status == 2) {
......
...@@ -308,6 +308,15 @@ public interface InformationService { ...@@ -308,6 +308,15 @@ public interface InformationService {
void initialData(InfoDataSearchCondition searchCondition); void initialData(InfoDataSearchCondition searchCondition);
/** /**
* 查找替换信息列表
*
* @param searchCondition 资讯检索条件
* @author lkg
* @date 2025/4/24
*/
IPage<SpecialInformation> searchForReplaceList(InfoDataSearchCondition searchCondition);
/**
* 字符串替换 * 字符串替换
* *
* @param searchCondition 资讯检索条件 * @param searchCondition 资讯检索条件
......
...@@ -1240,6 +1240,11 @@ public class InformationServiceImpl implements InformationService { ...@@ -1240,6 +1240,11 @@ public class InformationServiceImpl implements InformationService {
} }
@Override @Override
public IPage<SpecialInformation> searchForReplaceList(InfoDataSearchCondition searchCondition) {
return esService.searchForReplaceList(searchCondition);
}
@Override
public void charReplace(InfoDataSearchCondition searchCondition) { public void charReplace(InfoDataSearchCondition searchCondition) {
SearchWordVO searchWordVO = searchCondition.getSearchWordList().get(0); SearchWordVO searchWordVO = searchCondition.getSearchWordList().get(0);
Integer searchScope = searchWordVO.getSearchScope(); Integer searchScope = searchWordVO.getSearchScope();
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论