feat: There is no way the, 搜索中心 新需求 优化
This commit is contained in:
+11
-7
@@ -84,15 +84,19 @@ public class SearchCenterController extends BaseController<Map<String, Object>>
|
||||
if (StringUtils.isAlphanumericSpace(searchInfoEO.getSelectIndex())) {
|
||||
if(elasticsearchService.isIndexExist(searchInfoEO.getSelectIndex())){
|
||||
if("fulltextserch".equals(searchInfoEO.getSelectIndex()) || "fulltextserch"== searchInfoEO.getSelectIndex()){
|
||||
Pattern pattern = Pattern.compile("^[0-9a-zA-Z\\.\\(\\(\\)\\)\\s\\/\\-\\:]+$");
|
||||
if (null != searchInfoEO.getSelectValue() && StringUtils.isNotBlank(searchInfoEO.getSelectValue())) {
|
||||
if (pattern.matcher(searchInfoEO.getSelectValue()).matches()) {
|
||||
result = searchCenterService.searchSarBykeyAndHighLightNumber(searchInfoEO);
|
||||
}else {
|
||||
if(StringUtils.isNotBlank(searchInfoEO.getSelectType()) && "titleSearch".equals(searchInfoEO.getSelectType())){
|
||||
result = searchCenterService.searchSarBykeyAndHighLightNumberForTitle(searchInfoEO);
|
||||
}else {
|
||||
Pattern pattern = Pattern.compile("^[0-9a-zA-Z\\.\\(\\(\\)\\)\\s\\/\\-\\:]+$");
|
||||
if (null != searchInfoEO.getSelectValue() && StringUtils.isNotBlank(searchInfoEO.getSelectValue())) {
|
||||
if (pattern.matcher(searchInfoEO.getSelectValue()).matches()) {
|
||||
result = searchCenterService.searchSarBykeyAndHighLightNumber(searchInfoEO);
|
||||
}else {
|
||||
result = searchCenterService.searchSarBykeyAndHighLight(searchInfoEO);
|
||||
}
|
||||
} else {
|
||||
result = searchCenterService.searchSarBykeyAndHighLight(searchInfoEO);
|
||||
}
|
||||
} else {
|
||||
result = searchCenterService.searchSarBykeyAndHighLight(searchInfoEO);
|
||||
}
|
||||
for (int i = 0; i < result.size(); i++) {
|
||||
String collectId = personCollectEOService.queryCollectByUserAndId(result.get(i).get("id").toString());
|
||||
|
||||
@@ -270,6 +270,9 @@ public class SeniorSearchInfoEO extends BasePage {
|
||||
private String NYLXCLASS;
|
||||
|
||||
|
||||
@ApiModelProperty(value = "检索方式 : 全文检索 allTextSearch 、标题检索 titleSearch")
|
||||
private String selectType;
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -30,6 +30,8 @@ public interface SearchCenterService {
|
||||
|
||||
List<Map<String, Object>> searchSarBykeyAndHighLightNumber(SeniorSearchInfoEO searchInfoEO) throws Exception;
|
||||
|
||||
List<Map<String, Object>> searchSarBykeyAndHighLightNumberForTitle(SeniorSearchInfoEO searchInfoEO) throws Exception;
|
||||
|
||||
void searchByKey(CommonSearchInfoEO commonSearchInfoEO);
|
||||
|
||||
}
|
||||
|
||||
+69
-3
@@ -1253,8 +1253,6 @@ public class SearchCenterServiceImpl implements SearchCenterService {
|
||||
searchRequestBuilder = client.prepareSearch("fulltextserch")
|
||||
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
|
||||
.highlighter(hiBuilder)
|
||||
.addSort("sortTitle.keyword",SortOrder.ASC)
|
||||
.addSort("issue_time_order",SortOrder.DESC)
|
||||
.setFrom((searchInfoEO.getPage()-1)*searchInfoEO.getPageSize())
|
||||
.setSize(searchInfoEO.getPageSize());
|
||||
|
||||
@@ -1321,6 +1319,66 @@ public class SearchCenterServiceImpl implements SearchCenterService {
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Map<String, Object>> searchSarBykeyAndHighLightNumberForTitle(SeniorSearchInfoEO searchInfoEO) throws Exception {
|
||||
List<Map<String, Object>> result = new ArrayList<>();
|
||||
SearchRequestBuilder searchRequestBuilder;
|
||||
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
|
||||
// 记录搜索记录到数据库中
|
||||
BoolQueryBuilder boolQueryShould = QueryBuilders.boolQuery();
|
||||
BoolQueryBuilder boolQueryMust = QueryBuilders.boolQuery();
|
||||
QueryBuilder multiQueryBuilder;
|
||||
QueryBuilder multiQueryBuilder1;
|
||||
QueryBuilder queryBuilder1 = QueryBuilders.multiMatchQuery("");
|
||||
queryBuilder1 = QueryBuilders.multiMatchQuery(searchInfoEO.getSelectValue(),
|
||||
"sortTitle","numberTitle","yearOrder","nameTitle","title"
|
||||
).minimumShouldMatch("100%").field("sortTitle",1005f).field("numberTitle",1004f).field("yearOrder",1003f).field("nameTitle",1002f).field("title",1000f);
|
||||
boolQueryBuilder.must(queryBuilder1);
|
||||
|
||||
//在结果中检索
|
||||
HighlightBuilder hiBuilder=new HighlightBuilder();
|
||||
HighlightBuilder.Field highlightTitle = new HighlightBuilder.Field("title");
|
||||
hiBuilder.field(highlightTitle);
|
||||
hiBuilder.preTags("<span class='highlight-class'>");
|
||||
hiBuilder.postTags("</span>");
|
||||
updateIndex("fulltextserch");
|
||||
//1.按照资源库分类排序可实现数据的第一层排序(增加资源库自定义顺序标记,按标记排序)
|
||||
//2.标准类别根据资源库分类基础上进行第二层排序(需提前维护标准类别的自定义顺序)
|
||||
//3.标准编号则在标准类别的基础上进行第三层排序(此类排序针对国标、企标等规范类数据,海外标准由于历史数据不规范,可能会影响到检索的实际效果)
|
||||
//4.标准年份为第四层排序规则
|
||||
searchRequestBuilder = client.prepareSearch("fulltextserch")
|
||||
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
|
||||
.highlighter(hiBuilder)
|
||||
.addSort("standTypeOrder",SortOrder.ASC)
|
||||
.addSort("standSortOrder",SortOrder.ASC)
|
||||
.addSort("numberTitle",SortOrder.ASC)
|
||||
.addSort("yearOrder",SortOrder.DESC)
|
||||
.addSort("sortTitle.keyword",SortOrder.ASC)
|
||||
.setFrom((searchInfoEO.getPage()-1)*searchInfoEO.getPageSize())
|
||||
.setSize(searchInfoEO.getPageSize());
|
||||
|
||||
searchRequestBuilder.setQuery(boolQueryBuilder).setTrackTotalHits(true);
|
||||
SearchResponse response = searchRequestBuilder.get();
|
||||
for (SearchHit searchHit : response.getHits().getHits()) {
|
||||
searchHit.getSourceAsMap().put("id", searchHit.getId());
|
||||
Map<String, Object> sourceAsMap = searchHit.getSourceAsMap();
|
||||
//解析高亮字段
|
||||
Map<String, HighlightField> highlightFields = searchHit.getHighlightFields();
|
||||
HighlightField field= highlightFields.get("title");
|
||||
if(field!= null){
|
||||
Text[] fragments = field.fragments();
|
||||
String n_field = "";
|
||||
for (Text fragment : fragments) {
|
||||
n_field += fragment;
|
||||
}
|
||||
//高亮标题覆盖原标题
|
||||
sourceAsMap.put("title",n_field);
|
||||
}
|
||||
result.add(sourceAsMap);
|
||||
}
|
||||
searchInfoEO.getPager().setRowCount((int) response.getHits().getTotalHits().value);
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Map<String, Object>> searchSarBykeyAndHighLightNumber(SeniorSearchInfoEO searchInfoEO) throws Exception {
|
||||
@@ -1535,10 +1593,18 @@ public class SearchCenterServiceImpl implements SearchCenterService {
|
||||
hiBuilder.postTags("</span>");
|
||||
|
||||
updateIndex("fulltextserch");
|
||||
//1.按照资源库分类排序可实现数据的第一层排序(增加资源库自定义顺序标记,按标记排序)
|
||||
//2.标准类别根据资源库分类基础上进行第二层排序(需提前维护标准类别的自定义顺序)
|
||||
//3.标准编号则在标准类别的基础上进行第三层排序(此类排序针对国标、企标等规范类数据,海外标准由于历史数据不规范,可能会影响到检索的实际效果)
|
||||
//4.标准年份为第四层排序规则
|
||||
searchRequestBuilder = client.prepareSearch("fulltextserch")
|
||||
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
|
||||
.highlighter(hiBuilder)
|
||||
.addSort("issue_time_order",SortOrder.DESC)
|
||||
.addSort("standTypeOrder",SortOrder.ASC)
|
||||
.addSort("standSortOrder",SortOrder.ASC)
|
||||
.addSort("numberTitle",SortOrder.ASC)
|
||||
.addSort("yearOrder",SortOrder.DESC)
|
||||
.addSort("sortTitle.keyword",SortOrder.ASC)
|
||||
.setFrom((searchInfoEO.getPage()-1)*searchInfoEO.getPageSize())
|
||||
.setSize(searchInfoEO.getPageSize());
|
||||
|
||||
|
||||
Reference in New Issue
Block a user