diff --git a/adc-da-search/src/main/java/com/adc/da/search/controller/SearchCenterController.java b/adc-da-search/src/main/java/com/adc/da/search/controller/SearchCenterController.java index f3db7cf5..0f0047c5 100644 --- a/adc-da-search/src/main/java/com/adc/da/search/controller/SearchCenterController.java +++ b/adc-da-search/src/main/java/com/adc/da/search/controller/SearchCenterController.java @@ -86,7 +86,11 @@ public class SearchCenterController extends BaseController> 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())) { - result = searchCenterService.searchSarBykeyAndHighLight(searchInfoEO); + if (pattern.matcher(searchInfoEO.getSelectValue()).matches()) { + result = searchCenterService.searchSarBykeyAndHighLightNumber(searchInfoEO); + }else { + result = searchCenterService.searchSarBykeyAndHighLight(searchInfoEO); + } } else { result = searchCenterService.searchSarBykeyAndHighLight(searchInfoEO); } diff --git a/adc-da-search/src/main/java/com/adc/da/search/service/impl/SearchCenterServiceImpl.java b/adc-da-search/src/main/java/com/adc/da/search/service/impl/SearchCenterServiceImpl.java index ecd82781..56a7e230 100644 --- a/adc-da-search/src/main/java/com/adc/da/search/service/impl/SearchCenterServiceImpl.java +++ b/adc-da-search/src/main/java/com/adc/da/search/service/impl/SearchCenterServiceImpl.java @@ -760,7 +760,7 @@ public class SearchCenterServiceImpl implements SearchCenterService { String[] standStr = {"content","standSort","standNumber","standYear","stand_name","standEnName","standNatureName", "textStatusName","isRelateAccessName","numbershow","standSystem","NYLXCLASS","CLLX"}; String[] lawsStr = {"content","lawsType","lawsNumber","lawsName","lawsEnName","lawsNo","issueCompany","lawsTextState","lawsSyqy","lawsSycx","isRelateAccess","lawsYear","lawsNotisyncNum","lawsBulletin","lawsLabel","lawsRemark"}; - String[] bussstandStr = {"content","standSort","stand_code","standYear","stand_name","standEnName","nameshow","standstateshow","numbershow","textStatusBuss","NYLXCLASS","CLLX"}; + String[] bussstandStr = {"content","standSort","stand_code","standYear","stand_name","standEnName","nameshow","standstateshow","numbershow","textStatusBuss","textStatusBussName","NYLXCLASS","CLLX"}; for (String field : fieldList) { // 关键字查询属性字段 String keyWordField2 = field + "Name"; @@ -1287,17 +1287,17 @@ public class SearchCenterServiceImpl implements SearchCenterService { @Override public List> searchSarBykeyAndHighLightNumber(SeniorSearchInfoEO searchInfoEO) throws Exception { String real = searchInfoEO.getSelectValue(); - String[] values = searchInfoEO.getSelectValue().split(" "); + boolean isReal = false; + int num = searchInfoEO.getSelectValue().indexOf(" "); String value = ""; String select = ""; - int i = 0; - for (String v: values){ - if(i==0) { - value = v; - }else{ - select = select + " " + v; - } - i++; + if (-1 != num) { + value = searchInfoEO.getSelectValue().substring(0, num).trim(); + select = searchInfoEO.getSelectValue().substring(num + 1).trim(); + real = value + " " + select; + }else{ + value = real; + select = ""; } searchInfoEO.setSelectValue(select); List> result = new ArrayList<>(); @@ -1307,12 +1307,79 @@ public class SearchCenterServiceImpl implements SearchCenterService { BoolQueryBuilder boolQueryShould = QueryBuilders.boolQuery(); BoolQueryBuilder boolQueryMust = QueryBuilders.boolQuery(); QueryBuilder multiQueryBuilder; - multiQueryBuilder = QueryBuilders.multiMatchQuery(value, - "title.keyword","textContent.keyword").minimumShouldMatch("100%").field("title.keyword",1f); - boolQueryMust.must(multiQueryBuilder); - boolQueryShould.should(QueryBuilders.wildcardQuery("title.keyword", "*"+searchInfoEO.getSelectValue()+"*").boost(10f)) - .should(QueryBuilders.wildcardQuery("textContent.keyword", "*"+searchInfoEO.getSelectValue()+"*")) - .should(multiQueryBuilder); + String[] selects = null; + if (StringUtils.isNotBlank(select)) { + //判断标准号是否企标SMTC ,标准列别 (),/,字母 + Pattern pattern = Pattern.compile("^[a-zA-Z\\/\\(\\)\\(\\)]+$"); + if (pattern.matcher(value).matches()) { + //符合标准类别 + if ("SMTC".equals(value)) { + //符合标准SMTC + //判断是否带有年份 + Pattern patternbianhao = Pattern.compile("^[0-9a-zA-Z\\.\\(\\(\\)\\)\\-\\s]+$"); + if (patternbianhao.matcher(select).matches()) { +// 拆分年份,当无“-”时,也生成selects + selects = select.replace(" ","-").replace("(","-\\(-").replace(")","-\\)-").replace("(","-\\(-").replace(")","-\\)-").split("-"); + }else{ + //wildcard查询real + selects = select.replace(" ","-").replace("(","-\\(-").replace(")","-\\)-").replace("(","-\\(-").replace(")","-\\)-").split("-"); +// isReal = true; +// value = null; +// selects = null; + } + } else { + //不符合标准SMTC + Pattern patternbianhao = Pattern.compile("^[0-9a-zA-Z\\.\\(\\(\\)\\)\\-\\s]+$"); + if (patternbianhao.matcher(select).matches()) { + //符合标准编号 + selects = select.replace(" ","-").split("-"); + } else { + //不符合标准编号 使用wildcard查询 编号 + selects = select.replace(" ","-").split("-"); + } + } + } else { + //不符合标准类别,wildcard 查询整体 real 6/23 解决搜索DRE的问题 + selects = null; + value = real; +// isReal = true; + } + }else{ + //没有空格,存在问题,使用wildcard查询 real + selects = null; + value = real; +// isReal = true; + } + + if (isReal){ + //查询real + value = null; + selects = null; + } + + if (null != value) { + multiQueryBuilder = QueryBuilders.multiMatchQuery(value, + "title.keyword", "textContent", "issue_time").minimumShouldMatch("100%").field("title.keyword", 1000f).field("textContent.keyword", 0.0000000000000000000000000000000001f); +// boolQueryMust.must(multiQueryBuilder); + boolQueryShould.should(multiQueryBuilder); + } +// searchInfoEO.setSelectValue(searchInfoEO.getSelectValue().replace("-","\\-")); + if (null != selects) { + boolQueryShould.should(QueryBuilders.wildcardQuery("title.keyword", "*" + real + "*").boost(1000f)); + for (String se : selects) { + if (StringUtils.isNotBlank(se)) { + boolQueryShould +// .should(QueryBuilders.wildcardQuery("title.keyword", "*" + real + "*").boost(10f)) + .should(QueryBuilders.wildcardQuery("textContent.keyword", "*" + se + "*").boost(0.0000000000000000000000000000000001f)) + .should(QueryBuilders.wildcardQuery("issue_time", "*" + se + "*")); + } + } + } + if (isReal){ + boolQueryShould.should(QueryBuilders.wildcardQuery("title.keyword", "*" + real + "*").boost(1000f)) + .should(QueryBuilders.wildcardQuery("textContent.keyword", "*" + real + "*").boost(0.0000000000000000000000000000000001f)) + .should(QueryBuilders.wildcardQuery("issue_time", "*" + real + "*")); + } boolQueryBuilder.should(boolQueryShould); //在结果中检索 // boolQueryBuilder.must(multiQueryBuilder); @@ -1347,11 +1414,11 @@ public class SearchCenterServiceImpl implements SearchCenterService { n_field += fragment; } //高亮标题覆盖原标题 - sourceAsMap.put("title.keyword",n_field); + sourceAsMap.put("title",n_field); } Map highlightFieldsnameshowStr = searchHit.getHighlightFields(); - HighlightField fieldnameshowStr= highlightFieldsnameshowStr.get("textContent.keyword"); + HighlightField fieldnameshowStr= highlightFieldsnameshowStr.get("textContent"); if(fieldnameshowStr!= null){ Text[] fragments = fieldnameshowStr.fragments(); String n_field = ""; @@ -1359,7 +1426,7 @@ public class SearchCenterServiceImpl implements SearchCenterService { n_field += fragment; } //高亮标题覆盖原标题 - sourceAsMap.put("textContent.keyword",n_field); + sourceAsMap.put("textContent",n_field); } result.add(sourceAsMap); }