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); }