From ae1d7279b2a0122c4c11bd3d139428b8c53e4caa Mon Sep 17 00:00:00 2001 From: wangzhijiang <12345678> Date: Fri, 19 Aug 2022 09:33:13 +0800 Subject: [PATCH] =?UTF-8?q?=E6=90=9C=E7=B4=A2=E4=B8=AD=E5=BF=83-=E9=97=AE?= =?UTF-8?q?=E9=A2=98=E7=9F=A5=E8=AF=86=E5=BA=93=E6=9F=A5=E8=AF=A2=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E3=80=82=E6=8F=92=E5=85=A5=E9=97=AE=E9=A2=98=E7=9F=A5?= =?UTF-8?q?=E8=AF=86=E5=BA=93=E4=BF=AE=E6=94=B9=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ProblemKnowledgeBaseEOServiceImpl.java | 15 +- .../controller/DocumentSearchController.java | 8 + .../impl/DocumentSearchServiceImpl.java | 202 ++++++++++++++++++ .../service/impl/IDocumentSearchService.java | 1 + 4 files changed, 222 insertions(+), 4 deletions(-) diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/problemKnowledgeBase/service/impl/ProblemKnowledgeBaseEOServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/problemKnowledgeBase/service/impl/ProblemKnowledgeBaseEOServiceImpl.java index 1df1a001d..1e318355f 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/problemKnowledgeBase/service/impl/ProblemKnowledgeBaseEOServiceImpl.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/problemKnowledgeBase/service/impl/ProblemKnowledgeBaseEOServiceImpl.java @@ -77,7 +77,7 @@ public class ProblemKnowledgeBaseEOServiceImpl extends ServiceImpl getProblemKnowledgeBasePage(@RequestBody Map map) { + IPage infoList = iDocumentSearchService.getProblemKnowledgeBasePage(map); + return Result.OK(infoList); + } } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/searchcenter/service/impl/DocumentSearchServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/searchcenter/service/impl/DocumentSearchServiceImpl.java index 7336976ec..c43b212f4 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/searchcenter/service/impl/DocumentSearchServiceImpl.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/searchcenter/service/impl/DocumentSearchServiceImpl.java @@ -1073,6 +1073,208 @@ public class DocumentSearchServiceImpl implements IDocumentSearchService { } + @Override + public IPage getProblemKnowledgeBasePage(Map map) { + + boolean flagTemp = true; + String cut = (String) map.get("cut"); + if(StringUtils.equals(cut,CutEnum.CN.getValue())){ + flagTemp = jeroElasticsearchTemplate.indexExists(SearchEnum.TYPE_PROBLEM_KNOWLEDGE_BASE_CN.getValue()); + }else if(StringUtils.equals(cut,CutEnum.EN.getValue())){ + flagTemp = jeroElasticsearchTemplate.indexExists(SearchEnum.TYPE_PROBLEM_KNOWLEDGE_BASE_EN.getValue()); + } + + if (!flagTemp) { + return new Page(Integer.parseInt(map.get("pageNo").toString()), Integer.parseInt(map.get("pageSize").toString())); + } + JSONArray queryJsonMustNot = new JSONArray(); + + String selectValue = (String) map.get("selectValue"); + String selectValueTwo = (String) map.get("selectValueTwo"); + //1. 需要查询的字段 + List fieldList = new ArrayList<>(); + fieldList.add("title");//权重5 + fieldList.add("file_text");//权重4 + fieldList.add("content");//权重3 + fieldList.add("file_name"); //权重2 + fieldList.add("module_type"); + fieldList.add("id"); + fieldList.add("flag"); + + JSONArray queryMapJson = new JSONArray(); + JSONArray queryMapJsonTwo = new JSONArray(); + JSONArray queryMapJsonThree = new JSONArray(); + JSONArray queryMapJsonAll = new JSONArray(); + + Map mapHighlight = new HashMap<>(); + Map mapHighlight1 = new HashMap<>(); + //封装首次的条件 + if (StringUtils.isNotBlank(selectValue)) { + for (String field : fieldList) { + Map map2 = new HashMap<>(); + Map map3 = new HashMap<>(); + Map map4 = new HashMap<>(); + if("title".equals(field)){ + map3.put("boost",1); + }else if("file_text".equals(field)){ + map3.put("boost",0.01); + }else if("content".equals(field)){ + map3.put("boost",0.01); + }else if("file_name".equals(field)){ + map3.put("boost",1); + } + + map3.put("query",selectValue); + map2.put(field, map3); + map4.put("match",map2); + queryMapJson.add(map4); + + //高亮 + if(!"flag".equals(field)){ + highlight(mapHighlight, field); + } + } + mapHighlight1.put("fields",mapHighlight); + } + if(CollectionUtils.isNotEmpty(queryMapJson)){ + JSONObject jsonObject = jeroElasticsearchTemplate.buildBoolQuery(null, null, queryMapJson); + queryMapJsonAll.add(jsonObject); + } + //封装二次的条件 + if (StringUtils.isNotBlank(selectValueTwo)) { + for (String field : fieldList) { + Map queryMap = new HashMap<>(); + Map map2 = new HashMap<>(); + Map map3 = new HashMap<>(); + if("title".equals(field)){ + map3.put("boost",1); + }else if("file_text".equals(field)){ + map3.put("boost",0.01); + }else if("content".equals(field)){ + map3.put("boost",0.01); + }else if("file_name".equals(field)){ + map3.put("boost",1); + } + + //特殊处理编号字段 + map3.put("query",selectValueTwo); +// map3.put("minimum_should_match",2); + map2.put(field, map3); + queryMap.put("match", map2); + + queryMapJsonTwo.add(queryMap); + //高亮 + if(!"flag".equals(field)){ + highlight(mapHighlight, field); + } + } + mapHighlight1.put("fields",mapHighlight); + } + if(CollectionUtils.isNotEmpty(queryMapJsonTwo)){ + JSONObject jsonObjectTwo = jeroElasticsearchTemplate.buildBoolQuery(null, null, queryMapJsonTwo); + queryMapJsonAll.add(jsonObjectTwo); + } + //ids进行三次封装 + String ids = (String) map.get("ids"); + if (StringUtils.isNotBlank(ids)) { + for (String s : ids.split(",")) { + Map queryMap = new HashMap<>(); + Map queryMapTemp = new HashMap<>(); + queryMapTemp.put("id", s); + queryMap.put("match_phrase", queryMapTemp); + queryMapJsonThree.add(queryMap); + } + } + if(CollectionUtils.isNotEmpty(queryMapJsonThree)){ + JSONObject jsonObjectThree = jeroElasticsearchTemplate.buildBoolQuery(null, null, queryMapJsonThree); + queryMapJsonAll.add(jsonObjectThree); + } + JSONObject sort = new JSONObject(); + Map createTime = new HashMap<>(); + Map createTime1 = new HashMap<>(); + createTime.put("order","desc"); + createTime1.put("createTime",createTime); + sort.putAll(createTime1); + + Integer pageNo = Integer.parseInt(map.get("pageNo").toString()); + Integer pageSize = Integer.parseInt(map.get("pageSize").toString()); + IPage page = this.getProblemKnowledgeBasePage(selectValue, selectValueTwo, queryMapJsonAll, mapHighlight1,null, + pageNo, pageSize, null,(String) map.get("cut"),sort,queryJsonMustNot); + return page; + } + + @NotNull + private IPage getProblemKnowledgeBasePage(String selectValue, String selectValueTwo, JSONArray queryMapJson,Map highlightMap, + JSONArray should, Integer pageNo, Integer pageSize, String paragraphFlag, + String cut,JSONObject querySort,JSONArray queryMustNot) { + JSONObject jsonObject = new JSONObject(); + //基础添加封装 + if ("paragraphFlag".equals(paragraphFlag)) { + jsonObject = jeroElasticsearchTemplate.buildBoolQuery(queryMapJson, queryMustNot, null); + } else { + jsonObject = jeroElasticsearchTemplate.buildBoolQuery(queryMapJson, queryMustNot, null); + } + JSONArray jsonArraySort = new JSONArray(); + jsonArraySort.add(querySort); + + //1. 条件,分页 + JSONObject queryObject = jeroElasticsearchTemplate.buildQuery(null, + jsonObject, + highlightMap, + jsonArraySort, + pageNo-1, + pageSize); + //2. 数据查询 + JSONObject search = new JSONObject(); + + if(CutEnum.CN.getValue().equals(cut)){ + search = jeroElasticsearchTemplate.search(SearchEnum.TYPE_PROBLEM_KNOWLEDGE_BASE_CN.getValue(), + SearchEnum.TYPE_PROBLEM_KNOWLEDGE_BASE_CN.getValue(), + queryObject); + }else{ + search = jeroElasticsearchTemplate.search(SearchEnum.TYPE_PROBLEM_KNOWLEDGE_BASE_EN.getValue(), + SearchEnum.TYPE_PROBLEM_KNOWLEDGE_BASE_EN.getValue(), + queryObject); + } + + List> list = (List>) (((Map) search.get("hits")).get("hits")); + List> mapList = new ArrayList<>(); + for (Map map : list) { + Map mapSource = (Map) map.get("_source"); + Map mapHighlight = (Map) map.get("highlight"); + if(ObjectUtils.isNotEmpty(mapHighlight)){ + for (Map.Entry entry : mapHighlight.entrySet()) { + String key = entry.getKey(); + List value = (List) entry.getValue(); + String fieldConyent= ""; + for (String s : value) { + fieldConyent += s; + } + mapSource.put(key,fieldConyent); + } + //如果这一条数据中有高亮字段值,但是file_text中没有高亮值, 则赋控制,否则列表中会展示所有的文件内容, 赋空后,则展示基础数据 + String fileText = (String) mapSource.get("file_text"); + if(StringUtils.isNotBlank(fileText) && !fileText.contains("")){ + mapSource.put("file_text",""); + } + } + mapList.add(mapSource); + } + + //处理分页 + IPage page = new Page(pageNo, pageSize); + if (StringUtils.isNotBlank(selectValueTwo)) { + //二次搜索的结果 + page.setTotal(Long.parseLong(String.valueOf(((Map) search.get("hits")).get("total")))); + page.setRecords(mapList); + } else { + //首次搜索的结果 + page.setTotal(Long.parseLong(String.valueOf(((Map) search.get("hits")).get("total")))); + page.setRecords(mapList); + } + return page; + } + } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/searchcenter/service/impl/IDocumentSearchService.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/searchcenter/service/impl/IDocumentSearchService.java index b378c7127..51379e1ac 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/searchcenter/service/impl/IDocumentSearchService.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/searchcenter/service/impl/IDocumentSearchService.java @@ -27,4 +27,5 @@ public interface IDocumentSearchService { void deleteAll(); + IPage getProblemKnowledgeBasePage(Map map); }