From 375401e83a3baaeddf38949c9ef99e9f781279f7 Mon Sep 17 00:00:00 2001 From: super_liu <396572590@qq.com> Date: Thu, 28 Apr 2022 13:22:57 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20There=20is=20no=20way=20the,=20?= =?UTF-8?q?=E4=BC=98=E5=8C=96ES=20=E6=9D=83=E9=87=8D=20=E5=85=A8=E6=96=87?= =?UTF-8?q?=E6=90=9C=E7=B4=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/SearchCenterController.java | 2 +- .../service/impl/SearchCenterServiceImpl.java | 141 +++++++++++------- 2 files changed, 88 insertions(+), 55 deletions(-) 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 0f0047c5..a5c59070 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 @@ -84,7 +84,7 @@ public class SearchCenterController extends BaseController> 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\\/\\-]+$"); + 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); 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 efd29d25..00e66ce5 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 @@ -1299,8 +1299,41 @@ public class SearchCenterServiceImpl implements SearchCenterService { select = searchInfoEO.getSelectValue().substring(num + 1).trim(); real = value + " " + select; }else{ - value = real; - select = ""; + String reg = ".*[0-9].*"; + if("-".contains(real)){ + String content = real.split("-")[0]; + value = content.replaceAll("[^(A-Za-z\\/)]", ""); + String[] valArr = value.split("\\/"); + if (valArr.length > 2) { + value = valArr[0] + "/" + valArr[1]; + select = content.replaceAll("[^(0-9a-zA-Z\\.\\(\\(\\)\\)\\s\\/\\-\\:)]", "").replaceAll(value,""); + }else{ + value = valArr[0]; + select = real.replaceAll("[^(0-9a-zA-Z\\.\\(\\(\\)\\)\\s\\/\\-\\:)]", "").replaceAll(value,""); + } + real = value + " " + select; + }else if(real.matches(reg)){ + value = real.replaceAll("[^(A-Za-z\\/)]", ""); + String[] valArr = value.split("\\/"); + if (valArr.length > 2) { + value = valArr[0] + "/" + valArr[1]; + String[] str = real.split(value); + String sel = str[1].replaceAll("[^(0-9\\.\\(\\(\\)\\)\\s\\/\\-\\:)]", ""); + String[] valArr2 = sel.split("\\/"); + if(valArr2.length > 2){ + select = valArr2[0] + '/' + valArr[3] + valArr2[1]; + }else { + select = sel; + } + }else{ + value = valArr[0]; + select = real.replaceAll("[^(0-9a-zA-Z\\.\\(\\(\\)\\)\\s\\/\\-\\:)]", "").replaceAll(value,""); + } + real = value + " " + select; + }else { + value = real; + select = ""; + } } searchInfoEO.setSelectValue(select); List> result = new ArrayList<>(); @@ -1316,31 +1349,13 @@ public class SearchCenterServiceImpl implements SearchCenterService { //判断标准号是否企标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; - } + Pattern patternbianhao = Pattern.compile("^[0-9a-zA-Z\\.\\(\\(\\)\\)\\-\\s]+$"); + if (patternbianhao.matcher(select).matches()) { + //符合标准编号 + selects = select.replace(" ","-").split("-"); } 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("-"); - } + //不符合标准编号 使用wildcard查询 编号 + selects = select.replace(" ","-").split("-"); } } else { //不符合标准类别,wildcard 查询整体 real 6/23 解决搜索DRE的问题 @@ -1361,40 +1376,47 @@ public class SearchCenterServiceImpl implements SearchCenterService { selects = null; } - if (null != value) { - boolSelectValue.should(QueryBuilders.multiMatchQuery(value, - "title" - ).minimumShouldMatch("100%").field("title",1000f)); - boolSelectValue.should(QueryBuilders.multiMatchQuery(value, - "textContent" - ).minimumShouldMatch("100%").field("title",1000f)); - boolSelectValue.should(QueryBuilders.multiMatchQuery(value, - "textItems" - ).minimumShouldMatch("100%").field("title",1000f)); - boolSelectValue.should(QueryBuilders.wildcardQuery("title.keyword","*"+value+"*")); - boolQueryShould.must(boolSelectValue); + if(null != value || null != selects){ + if (null != value && selects == null) { + boolSelectValue.should(QueryBuilders.multiMatchQuery(value, + "title" + ).minimumShouldMatch("100%").field("title",1000f)); + boolSelectValue.should(QueryBuilders.multiMatchQuery(value, + "textContent" + ).minimumShouldMatch("100%").field("title",1000f)); + boolSelectValue.should(QueryBuilders.multiMatchQuery(value, + "textItems" + ).minimumShouldMatch("100%").field("title",1000f)); + boolSelectValue.should(QueryBuilders.wildcardQuery("title.keyword","*"+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 + "*")); - } } +// searchInfoEO.setSelectValue(searchInfoEO.getSelectValue().replace("-","\\-")); + if (null != selects) { + boolSelectValue + .should(QueryBuilders.wildcardQuery("title.keyword", "*" + real + "*").boost(1000f)) + .should(QueryBuilders.wildcardQuery("textContent.keyword", "*" + real + "*").boost(0.0000000000000000000000000000000001f)) + .should(QueryBuilders.wildcardQuery("issue_time", "*" + real + "*")); +// for (String se : selects) { +// if (StringUtils.isNotBlank(se)) { +// boolSelectValue +// .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){ +// boolSelectValue.should(QueryBuilders.wildcardQuery("title.keyword", "*" + real + "*").boost(1000f)) +// .should(QueryBuilders.wildcardQuery("textContent.keyword", "*" + real + "*").boost(0.0000000000000000000000000000000001f)) +// .should(QueryBuilders.wildcardQuery("issue_time", "*" + real + "*")); +// boolQueryShould.must(boolSelectValue); +// } + boolQueryShould.must(boolSelectValue); } - 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 queryBuilder = new BoolQueryBuilder(); if(StringUtils.isNotBlank(searchInfoEO.getNYLXCLASS()) || StringUtils.isNotBlank(searchInfoEO.getCLLX())){ if(StringUtils.isNotBlank(searchInfoEO.getNYLXCLASS())){ @@ -1467,6 +1489,17 @@ public class SearchCenterServiceImpl implements SearchCenterService { return result; } + private String getValue(String real) { + String value = real.replaceAll("[^(A-Za-z\\/)]", ""); + String[] valArr = value.split("\\/"); + if (valArr.length > 2) { + value = valArr[0] + "/" + valArr[1]; + }else{ + value = valArr[0]; + } + return value; + } + //更新索引的max_result_window参数 private boolean updateIndex(String indices, int from,int size) { int records = from * size + size;