feat: There is no way the, 新需求 添加查询ES详情接口 文本分词高亮显示全部内容

This commit is contained in:
super_liu
2022-06-10 11:10:41 +08:00
parent 0437d94266
commit 95d69d7a2b
4 changed files with 124 additions and 0 deletions
@@ -72,6 +72,17 @@ public class SearchCenterController extends BaseController<Map<String, Object>>
return Result.success(iTsDictypeService.getSearchMenu());
}*/
/**
*
* @param searchInfoEO
* @return
*/
@ApiOperation(value = "|SearchCenter|根据标准ID查询详情")
@PostMapping(value="/searchSarBykeyByDetils")
public ResponseMessage<Map<String, Object>> searchSarBykeyByDetils(SeniorSearchInfoEO searchInfoEO){
return Result.success(searchCenterService.searchSarBykeyAndHighLightByDetils(searchInfoEO));
}
/**
*
* @param searchInfoEO
@@ -273,6 +273,9 @@ public class SeniorSearchInfoEO extends BasePage {
@ApiModelProperty(value = "检索方式 : 全文检索 allTextSearch 、标题检索 titleSearch")
private String selectType;
@ApiModelProperty(value = "全文检索 标准ID")
private String standId;
}
@@ -24,6 +24,8 @@ public interface SearchCenterService {
Map<String, Object> selectGroupdata(SeniorSearchInfoEO searchInfoEO);
Map<String, Object> searchSarBykeyAndHighLightByDetils(SeniorSearchInfoEO searchInfoEO);
String [] searchIdToImport(SeniorSearchInfoEO searchInfoEO);
List<Map<String, Object>> searchSarBykeyAndHighLight(SeniorSearchInfoEO searchInfoEO) throws Exception;
@@ -1206,6 +1206,114 @@ public class SearchCenterServiceImpl implements SearchCenterService {
return resultid;
}
@Override
public Map<String, Object> searchSarBykeyAndHighLightByDetils(SeniorSearchInfoEO searchInfoEO){
// if ()
Map<String, Object> resultMap = new HashMap<>();
SearchRequestBuilder searchRequestBuilder;
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
BoolQueryBuilder boolSelectValue = new BoolQueryBuilder();
// 记录搜索记录到数据库中
if(StringUtils.isNotBlank(searchInfoEO.getStandId())){
QueryBuilder multiQueryBuilderById = QueryBuilders.multiMatchQuery("");
QueryBuilder multiQueryBuilder = QueryBuilders.multiMatchQuery("");
multiQueryBuilderById = QueryBuilders.multiMatchQuery(searchInfoEO.getStandId(),
"id"
);
boolQueryBuilder.must(multiQueryBuilderById);
}
if(StringUtils.isNotEmpty(searchInfoEO.getSelectValue()) && StringUtils.isNotBlank(searchInfoEO.getStandId())){
QueryBuilder multiQueryBuilder = QueryBuilders.multiMatchQuery("");
multiQueryBuilder = QueryBuilders.multiMatchQuery(searchInfoEO.getSelectValue(),
"textContent"
).minimumShouldMatch("100%");
boolQueryBuilder.must(multiQueryBuilder);
}
//在结果中检索
if (StringUtils.isNotEmpty(searchInfoEO.getResultKeyword())) {
QueryBuilder multiQuery = queryInResult(searchInfoEO);
boolQueryBuilder.must(multiQuery);
}
BoolQueryBuilder queryBuilder = new BoolQueryBuilder();
if(StringUtils.isNotBlank(searchInfoEO.getNYLXCLASS()) || StringUtils.isNotBlank(searchInfoEO.getCLLX())){
if(StringUtils.isNotBlank(searchInfoEO.getNYLXCLASS())){
queryBuilder.should(QueryBuilders.multiMatchQuery(searchInfoEO.getNYLXCLASS(),
"textContent"
).minimumShouldMatch("100%").field("title",10f));
}
if(StringUtils.isNotBlank(searchInfoEO.getCLLX())){
queryBuilder.should(QueryBuilders.multiMatchQuery(searchInfoEO.getCLLX(),
"textContent"
).minimumShouldMatch("100%").field("title",10f));
}
boolQueryBuilder.must(queryBuilder);
}
HighlightBuilder hiBuilder=new HighlightBuilder();
HighlightBuilder.Field highlightUser = new HighlightBuilder.Field("textContent");
highlightUser.numOfFragments(0);
hiBuilder.field(highlightUser);
hiBuilder.preTags("<span class='highlight-Es-class'>");
hiBuilder.postTags("</span>");
updateIndex("fulltextserch");
// _score 全文词频排序
searchRequestBuilder = client.prepareSearch("fulltextserch")
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
.highlighter(hiBuilder);
// boolQueryBuilder.must(QueryBuilders.matchQuery("valid_flag", 0));
// boolQueryBuilder.should(boolQueryBuilderShould);
searchRequestBuilder.setQuery(boolQueryBuilder).setTrackTotalHits(true);
// 获取查询到的结果
SearchResponse response = searchRequestBuilder.get();
for (SearchHit searchHit : response.getHits().getHits()) {
searchHit.getSourceAsMap().put("id", searchHit.getId());
resultMap = searchHit.getSourceAsMap();
//解析高亮字段
Map<String, HighlightField> highlightFieldsnameshowStr = searchHit.getHighlightFields();
HighlightField fieldnameshowStr= highlightFieldsnameshowStr.get("textContent");
if(fieldnameshowStr!= null){
Text[] fragments = fieldnameshowStr.fragments();
String n_field = "";
for (Text fragment : fragments) {
n_field += fragment;
}
//高亮标题覆盖原标题
resultMap.put("textContent",n_field);
}
// 条款内容
Map<String, HighlightField> highlightFieldItemStr = searchHit.getHighlightFields();
HighlightField fieldItemStr= highlightFieldItemStr.get("textItems");
if(fieldItemStr!= null){
Text[] fragments = fieldItemStr.fragments();
String n_field = "";
for (Text fragment : fragments) {
n_field += fragment;
}
//高亮标题覆盖原标题
resultMap.put("textItems",n_field);
}
//发布日期添加高亮
// Map<String, HighlightField> highlightFieldsDatehowStr = searchHit.getHighlightFields();
// HighlightField fieldDateshowStr= highlightFieldsDatehowStr.get("issue_time");
// if(fieldDateshowStr!= null){
// Text[] fragments = fieldDateshowStr.fragments();
// String n_field = "";
// for (Text fragment : fragments) {
// n_field += fragment;
// }
// //高亮标题覆盖原标题
// sourceAsMap.put("issue_time",n_field);
// }
}
return resultMap;
}
@Override
public List<Map<String, Object>> searchSarBykeyAndHighLight(SeniorSearchInfoEO searchInfoEO) throws Exception {
// if ()