Merge branch 'develop_master' into FOTON
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 (StringUtils.isAlphanumericSpace(searchInfoEO.getSelectIndex())) {
|
||||||
if(elasticsearchService.isIndexExist(searchInfoEO.getSelectIndex())){
|
if(elasticsearchService.isIndexExist(searchInfoEO.getSelectIndex())){
|
||||||
if("fulltextserch".equals(searchInfoEO.getSelectIndex()) || "fulltextserch"== searchInfoEO.getSelectIndex()){
|
if("fulltextserch".equals(searchInfoEO.getSelectIndex()) || "fulltextserch"== searchInfoEO.getSelectIndex()){
|
||||||
Pattern pattern = Pattern.compile("^[0-9a-zA-Z\\.\\(\\(\\)\\)\\s\\/\\-\\:]+$");
|
if(StringUtils.isNotBlank(searchInfoEO.getSelectType()) && "titleSearch".equals(searchInfoEO.getSelectType())){
|
||||||
if (null != searchInfoEO.getSelectValue() && StringUtils.isNotBlank(searchInfoEO.getSelectValue())) {
|
result = searchCenterService.searchSarBykeyAndHighLightNumberForTitle(searchInfoEO);
|
||||||
if (pattern.matcher(searchInfoEO.getSelectValue()).matches()) {
|
}else {
|
||||||
result = searchCenterService.searchSarBykeyAndHighLightNumber(searchInfoEO);
|
Pattern pattern = Pattern.compile("^[0-9a-zA-Z\\.\\(\\(\\)\\)\\s\\/\\-\\:]+$");
|
||||||
}else {
|
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);
|
result = searchCenterService.searchSarBykeyAndHighLight(searchInfoEO);
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
result = searchCenterService.searchSarBykeyAndHighLight(searchInfoEO);
|
|
||||||
}
|
}
|
||||||
for (int i = 0; i < result.size(); i++) {
|
for (int i = 0; i < result.size(); i++) {
|
||||||
String collectId = personCollectEOService.queryCollectByUserAndId(result.get(i).get("id").toString());
|
String collectId = personCollectEOService.queryCollectByUserAndId(result.get(i).get("id").toString());
|
||||||
|
|||||||
@@ -270,6 +270,9 @@ public class SeniorSearchInfoEO extends BasePage {
|
|||||||
private String NYLXCLASS;
|
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>> searchSarBykeyAndHighLightNumber(SeniorSearchInfoEO searchInfoEO) throws Exception;
|
||||||
|
|
||||||
|
List<Map<String, Object>> searchSarBykeyAndHighLightNumberForTitle(SeniorSearchInfoEO searchInfoEO) throws Exception;
|
||||||
|
|
||||||
void searchByKey(CommonSearchInfoEO commonSearchInfoEO);
|
void searchByKey(CommonSearchInfoEO commonSearchInfoEO);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+84
-3
@@ -1250,11 +1250,11 @@ public class SearchCenterServiceImpl implements SearchCenterService {
|
|||||||
hiBuilder.preTags("<span class='highlight-class'>");
|
hiBuilder.preTags("<span class='highlight-class'>");
|
||||||
hiBuilder.postTags("</span>");
|
hiBuilder.postTags("</span>");
|
||||||
updateIndex("fulltextserch");
|
updateIndex("fulltextserch");
|
||||||
|
// _score 全文词频排序
|
||||||
searchRequestBuilder = client.prepareSearch("fulltextserch")
|
searchRequestBuilder = client.prepareSearch("fulltextserch")
|
||||||
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
|
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
|
||||||
.highlighter(hiBuilder)
|
.highlighter(hiBuilder)
|
||||||
.addSort("sortTitle.keyword",SortOrder.ASC)
|
.addSort("_score",SortOrder.DESC)
|
||||||
.addSort("issue_time_order",SortOrder.DESC)
|
|
||||||
.setFrom((searchInfoEO.getPage()-1)*searchInfoEO.getPageSize())
|
.setFrom((searchInfoEO.getPage()-1)*searchInfoEO.getPageSize())
|
||||||
.setSize(searchInfoEO.getPageSize());
|
.setSize(searchInfoEO.getPageSize());
|
||||||
|
|
||||||
@@ -1321,6 +1321,86 @@ public class SearchCenterServiceImpl implements SearchCenterService {
|
|||||||
return result;
|
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("");
|
||||||
|
if(StringUtils.isNotBlank(searchInfoEO.getSelectValue())){
|
||||||
|
queryBuilder1 = QueryBuilders.multiMatchQuery(searchInfoEO.getSelectValue(),
|
||||||
|
"title"
|
||||||
|
).minimumShouldMatch("100%").field("title",1000f);
|
||||||
|
boolQueryBuilder.must(queryBuilder1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
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",1000f));
|
||||||
|
}
|
||||||
|
|
||||||
|
if(StringUtils.isNotBlank(searchInfoEO.getCLLX())){
|
||||||
|
queryBuilder.should(QueryBuilders.multiMatchQuery(searchInfoEO.getCLLX(),
|
||||||
|
"textContent"
|
||||||
|
).minimumShouldMatch("100%").field("title",1000f));
|
||||||
|
}
|
||||||
|
|
||||||
|
boolQueryBuilder.must(queryBuilder);
|
||||||
|
}
|
||||||
|
|
||||||
|
//在结果中检索
|
||||||
|
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
|
@Override
|
||||||
public List<Map<String, Object>> searchSarBykeyAndHighLightNumber(SeniorSearchInfoEO searchInfoEO) throws Exception {
|
public List<Map<String, Object>> searchSarBykeyAndHighLightNumber(SeniorSearchInfoEO searchInfoEO) throws Exception {
|
||||||
@@ -1535,10 +1615,11 @@ public class SearchCenterServiceImpl implements SearchCenterService {
|
|||||||
hiBuilder.postTags("</span>");
|
hiBuilder.postTags("</span>");
|
||||||
|
|
||||||
updateIndex("fulltextserch");
|
updateIndex("fulltextserch");
|
||||||
|
// _score 全文词频排序
|
||||||
searchRequestBuilder = client.prepareSearch("fulltextserch")
|
searchRequestBuilder = client.prepareSearch("fulltextserch")
|
||||||
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
|
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
|
||||||
.highlighter(hiBuilder)
|
.highlighter(hiBuilder)
|
||||||
.addSort("issue_time_order",SortOrder.DESC)
|
.addSort("_score",SortOrder.DESC)
|
||||||
.setFrom((searchInfoEO.getPage()-1)*searchInfoEO.getPageSize())
|
.setFrom((searchInfoEO.getPage()-1)*searchInfoEO.getPageSize())
|
||||||
.setSize(searchInfoEO.getPageSize());
|
.setSize(searchInfoEO.getPageSize());
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user