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 05b5f948..35aa18cd 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 @@ -1369,6 +1369,10 @@ public class SearchCenterServiceImpl implements SearchCenterService { .should(QueryBuilders.wildcardQuery("yearOrder.keyword", searchInfoEO.getSelectValue().toUpperCase() + "*").boost(1003f)) .should(QueryBuilders.wildcardQuery("nameTitle.keyword", "*" + searchInfoEO.getSelectValue().toUpperCase() + "*").boost(1002f)) .should(QueryBuilders.wildcardQuery("title.keyword", "*" + searchInfoEO.getSelectValue().toUpperCase() + "*").boost(1000f)); +// queryBuilder1 = QueryBuilders.multiMatchQuery(searchInfoEO.getSelectValue(), +// "sortTitle","numberTitle","yearOrder","nameTitle","title" +// ).field("sortTitle",1005f).field("numberTitle",1004f).field("yearOrder",1003f).field("nameTitle",1002f).field("title",1000f); + // queryBuilder1 = QueryBuilders.wildcardQuery("title.keyword","*" + searchInfoEO.getSelectValue() + "*"); // queryBuilder1 = QueryBuilders.multiMatchQuery(searchInfoEO.getSelectValue(), // "title" @@ -1452,7 +1456,9 @@ public class SearchCenterServiceImpl implements SearchCenterService { //高亮标题覆盖原标题 String titleStr = sourceAsMap.get("title").toString(); - titleStr = titleStr.replace(searchInfoEO.getSelectValue(),""+searchInfoEO.getSelectValue()+""); + int i = indexOfToKMP(titleStr.toUpperCase(), searchInfoEO.getSelectValue().toUpperCase(), 0, getNextValInstance()); + String selectValue = titleStr.substring(i,i+searchInfoEO.getSelectValue().length()); + titleStr = titleStr.replace(selectValue,""+selectValue+""); if(StringUtils.isNotBlank(textStatusColor)){ sourceAsMap.put("title", ""+titleStr+""); }else { @@ -1481,8 +1487,16 @@ public class SearchCenterServiceImpl implements SearchCenterService { return result; } + public static void main(String[] args) { + String str = "GB B005-2022 啊啊啊啊啊"; + String str1 = "B005"; + int i = indexOfToKMP(str, str1, 0, getNextValInstance()); + System.out.println(i); + + } + // 改进版的nextVal数组 - public NextArray getNextValInstance() { + public static NextArray getNextValInstance() { return target -> { // 初始化数组大小 int[] nextVal = new int[target.length()]; @@ -1518,7 +1532,7 @@ public class SearchCenterServiceImpl implements SearchCenterService { * @param nextArray 函数式接口,传入获取next数组的方法(因为next数组上面定义了两种获取方式) * @return 目标字符串在源字符串中第一次出现的索引位置 */ - public int indexOfToKMP(String source, String target, int pos, NextArray nextArray) { + public static int indexOfToKMP(String source, String target, int pos, NextArray nextArray) { int i, j; // 调用接口中的方法,获取next数组 int[] next = nextArray.getNext(target);