From e6f40cfafd913f565e04f717429ba6e9609b4860 Mon Sep 17 00:00:00 2001 From: zhn <947514737@qq.com> Date: Thu, 31 Mar 2022 21:57:52 +0800 Subject: [PATCH] =?UTF-8?q?=E6=90=9C=E7=B4=A2=E4=B8=AD=E5=BF=83--=E5=9C=A8?= =?UTF-8?q?=E7=BB=93=E6=9E=9C=E4=B8=AD=E6=9F=A5=E8=AF=A2=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/DocumentSearchServiceImpl.java | 269 +++++------------- 1 file changed, 67 insertions(+), 202 deletions(-) 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 8dd63e3f9..78a0826f7 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 @@ -94,7 +94,6 @@ public class DocumentSearchServiceImpl implements IDocumentSearchService { map.put("db_field_name", "file_text"); mapList.add(map); } - //type = 0时,查询下拉,树形,日期等字段 type = 1时,查询输入框字段 return mapList; } @@ -259,9 +258,6 @@ public class DocumentSearchServiceImpl implements IDocumentSearchService { String key = entry.getKey(); Object value = entry.getValue(); //处理二次搜索中选择列表数据 -// if("ids".equals(key) && ObjectUtils.isNotEmpty(value)){ -// inputMap.put("id", value); -// } if (inputFieldList.contains(key)) { inputMap.put(key, value); } @@ -304,161 +300,6 @@ public class DocumentSearchServiceImpl implements IDocumentSearchService { } } } -// @Override -// public IPage getInfoList(Map mapOne,Map mapTwoTwo) { -// boolean flagTemp = jeroElasticsearchTemplate.indexExists(SearchEnum.INDEX_NAME_DOCUMENT.getValue()); -// if(!flagTemp){ -// return new Page(Integer.parseInt(map.get("pageNo").toString()), Integer.parseInt(map.get("pageSize").toString())); -// } -// //文档库所有的字段 -// List fieldList = onlCgformFieldService.getFieldList(ModuleEnum.DOCUMENT_LIBRARY.getValue()); -// //需要查询的列表字段 -// List hearOnlCgformFieldList = fieldList.stream() -// .filter(e -> YesOrNoEnum.YES.getValue().equals(e.getIsShowSearch())).collect(Collectors.toList()); -// List sourceList = hearOnlCgformFieldList.stream().map(OnlCgformField::getDbFieldName).collect(Collectors.toList()); -// sourceList.add("id"); -// -// //输入框字段 -// List inputOnlCgformFieldList = fieldList.stream() -// .filter(e -> FieldTypeEnum.TEXT_STRING.getValue().equals(e.getFieldShowType()) -// || FieldTypeEnum.TEXT_NUMBER.getValue().equals(e.getFieldShowType())) -// .collect(Collectors.toList()); -// List inputFieldList = inputOnlCgformFieldList.stream().map(OnlCgformField::getDbFieldName).collect(Collectors.toList()); -// //下拉,树形,日期等字段 -// List otherOnlCgformFieldList = fieldList.stream() -// .filter(e -> FieldTypeEnum.PULL_SINGLE.getValue().equals(e.getFieldShowType())//下拉单选 -// || FieldTypeEnum.PULL_MORE.getValue().equals(e.getFieldShowType())//下拉多选 -// || FieldTypeEnum.DATE_SINGLE.getValue().equals(e.getFieldShowType())//日期单选 -// || FieldTypeEnum.DATE_MORE.getValue().equals(e.getFieldShowType())//日期多选 -// || FieldTypeEnum.TREE.getValue().equals(e.getFieldShowType()))//树形 -// .collect(Collectors.toList()); -// List otherFieldList = otherOnlCgformFieldList.stream().map(OnlCgformField::getDbFieldName).collect(Collectors.toList()); -// -// //过滤出下拉选 -// List onlCgformFieldList = fieldList.stream() -// .filter(e -> FieldTypeEnum.PULL_SINGLE.getValue().equals(e.getFieldShowType()) -// || FieldTypeEnum.PULL_MORE.getValue().equals(e.getFieldShowType())) -// .collect(Collectors.toList()); -// //过滤出文件类型字段 -// List onlCgformFieldFileList = fieldList.stream() -// .filter(e -> FieldTypeEnum.FILE.getValue().equals(e.getFieldShowType())) -// .collect(Collectors.toList()); -// //文件字段 -// List FieldFileList = onlCgformFieldFileList.stream().map(OnlCgformField::getDbFieldName).collect(Collectors.toList()); -// sourceList.addAll(FieldFileList); -// -// //下拉选字段 -// List fieldPullList = onlCgformFieldList.stream().map(OnlCgformField::getDbFieldName).collect(Collectors.toList()); -// -// //过滤出树形字段 -// List treeFieldList = fieldList.stream() -// .filter(e -> FieldTypeEnum.TREE.getValue().equals(e.getFieldShowType())) -// .collect(Collectors.toList()); -// -// Map inputMap = new HashMap<>();//条件内容为输入框的 -// Map otherMap = new HashMap<>();//条件内容为下拉,日期,树形 -// //区分输入框和下拉,树形,日期等字段 -// if (ObjectUtils.isNotEmpty(map)) { -// for (Map.Entry entry : map.entrySet()) { -// String key = entry.getKey(); -// Object value = entry.getValue(); -// //二次搜索中选择列表数据的情况 -// if("ids".equals(key) && StringUtils.isNotBlank((String)value)){ -// inputMap.put("id", value); -// } -// if (inputFieldList.contains(key)) { -// inputMap.put(key, value); -// } -// if (otherFieldList.contains(key)) { -// otherMap.put(key, value); -// } -// } -// } -// JSONArray should = new JSONArray(); -// JSONArray must = new JSONArray(); -// //封装输入框查询条件 -// if (ObjectUtils.isNotEmpty(inputMap)) { -// for (Map.Entry entry : inputMap.entrySet()) { -// -// String key = entry.getKey(); -// String value = (String )entry.getValue(); -//// value = "车,机动"; -// if(ObjectUtils.isNotEmpty(value)){ -// for (String s : value.split(",")) { -// Map queryMap = new HashMap<>(); -// Map queryMapTemp = new HashMap<>(); -// queryMapTemp.put(key, s); -// queryMap.put("match_phrase", queryMapTemp); -// must.add(queryMap); -// } -// } -// } -// } -// //封装下拉,树形,日期查询条件 -// if (ObjectUtils.isNotEmpty(otherMap)) { -// for (Map.Entry entry : otherMap.entrySet()) { -// String key = entry.getKey(); -// String value = (String) entry.getValue(); -//// value = "1"; -// if(ObjectUtils.isNotEmpty(value)){ -// for (String s : value.split(",")) { -// Map queryMap = new HashMap<>(); -// Map queryMapTemp = new HashMap<>(); -// queryMapTemp.put(key, s); -// queryMap.put("match_phrase", queryMapTemp); -// must.add(queryMap); -// } -// } -// } -// } -// //列表 -// //封装查询条件 -// JSONObject jsonObject = jeroElasticsearchTemplate.buildBoolQuery(must, null, null); -// //1. 封装分页和字段值 -// JSONObject queryObject = jeroElasticsearchTemplate.buildQuery(sourceList, jsonObject, null, null, Integer.parseInt(map.get("pageNo").toString()), Integer.parseInt(map.get("pageSize").toString())); -// //2. 数据查询 -// JSONObject search = jeroElasticsearchTemplate.search(SearchEnum.INDEX_NAME_DOCUMENT.getValue(), SearchEnum.TYPE_NAME_DOCUMENT.getValue(), queryObject); -// -// -// //处理数据字典 -// List sysDictItems = sysDictItemServiceImpl.selectItemsAll();//下拉数据字典 -// List categoryList = sysCategoryService.list();//树形数据字典 -// List> list = (List>) (((Map) search.get("hits")).get("hits")); -// List> mapList = new ArrayList<>(); -// for (Map stringObjectMap : list) { -// Map mapTemp = (Map) stringObjectMap.get("_source"); -// //格式化时间字段 -// solveTime(mapTemp); -// mapList.add(mapTemp); -// List fileList = new ArrayList<>(); -// mapTemp.entrySet().forEach(entry -> { -// //下拉选处理数据字典 -// bussDocumentLibraryEOService.treeDictItem(categoryList, entry, treeFieldList, (String) map.get("cut")); -// -// //下拉单选和下拉多选数据字典处理 -// if (fieldPullList.contains(entry.getKey())) { -// bussDocumentLibraryEOService.dictItem(sysDictItems, entry, onlCgformFieldList, (String) map.get("cut")); -// } -// -// //处理文件 -// if (FieldFileList.contains(entry.getKey())) { -// List fileInfos = iOSSFileService.getFileInfos((String) entry.getValue()); -// if (fileInfos.size() > 0) { -// for (OSSFile fileInfo : fileInfos) { -// fileList.add(fileInfo); -// } -// } -// } -// -// }); -// mapTemp.put("file_name", fileList); -// } -// IPage page = new Page(Integer.parseInt(map.get("pageNo").toString()), Integer.parseInt(map.get("pageSize").toString())); -// page.setTotal(Long.parseLong(String.valueOf(((Map) search.get("hits")).get("total")))); -// page.setRecords(mapList); -// return page; -// } - @Override public IPage getFullTextInfoList(SearchVO searchVO) { @@ -473,7 +314,6 @@ public class DocumentSearchServiceImpl implements IDocumentSearchService { if (!flagTemp) { return new Page(searchVO.getPageNo(), searchVO.getPageSize()); } - String selectValue = searchVO.getSelectValue(); String selectValueTwo = searchVO.getSelectValueTwo(); //不查询高亮字段 @@ -488,7 +328,9 @@ public class DocumentSearchServiceImpl implements IDocumentSearchService { fieldList.add("id"); JSONArray queryMapJson = new JSONArray(); JSONArray queryMapJsonTwo = new JSONArray(); + JSONArray queryMapJsonThree = new JSONArray(); JSONArray queryMapJsonAll = new JSONArray(); + //封装首次的条件 if (StringUtils.isNotBlank(selectValue)) { for (String field : fieldList) { Map queryMap = new HashMap<>(); @@ -502,7 +344,7 @@ public class DocumentSearchServiceImpl implements IDocumentSearchService { JSONObject jsonObject = jeroElasticsearchTemplate.buildBoolQuery(null, null, queryMapJson); queryMapJsonAll.add(jsonObject); } - + //封装二次的条件 if (StringUtils.isNotBlank(selectValueTwo)) { for (String field : fieldList) { Map queryMap = new HashMap<>(); @@ -512,29 +354,28 @@ public class DocumentSearchServiceImpl implements IDocumentSearchService { queryMapJsonTwo.add(queryMap); } } - //处理二次查询中选择了课表数据进行查询的情况 + if(CollectionUtils.isNotEmpty(queryMapJsonTwo)){ + JSONObject jsonObjectTwo = jeroElasticsearchTemplate.buildBoolQuery(null, null, queryMapJsonTwo); + queryMapJsonAll.add(jsonObjectTwo); + } + //ids进行三次封装 if (StringUtils.isNotBlank(searchVO.getIds())) { for (String s : searchVO.getIds().split(",")) { Map queryMap = new HashMap<>(); Map queryMapTemp = new HashMap<>(); queryMapTemp.put("id", s); queryMap.put("match_phrase", queryMapTemp); - queryMapJsonTwo.add(queryMap); + queryMapJsonThree.add(queryMap); } } + if(CollectionUtils.isNotEmpty(queryMapJsonThree)){ + JSONObject jsonObjectThree = jeroElasticsearchTemplate.buildBoolQuery(null, null, queryMapJsonThree); + queryMapJsonAll.add(jsonObjectThree); + } Integer pageNo = searchVO.getPageNo(); Integer pageSize = searchVO.getPageSize(); - //封装二次查询 - if(CollectionUtils.isNotEmpty(queryMapJsonTwo)){ - JSONObject jsonObjectTwo = jeroElasticsearchTemplate.buildBoolQuery(null, null, queryMapJsonTwo); - queryMapJsonAll.add(jsonObjectTwo); - } - IPage page = getiPage(selectValue, selectValueTwo, queryMapJsonAll, null, pageNo, pageSize, null,searchVO.getCut()); - - return page; - } @NotNull @@ -543,7 +384,7 @@ public class DocumentSearchServiceImpl implements IDocumentSearchService { JSONObject jsonObject = new JSONObject(); //基础添加封装 if ("paragraphFlag".equals(paragraphFlag)) { - jsonObject = jeroElasticsearchTemplate.buildBoolQuery(queryMapJson, null, should); + jsonObject = jeroElasticsearchTemplate.buildBoolQuery(queryMapJson, null, null); } else { jsonObject = jeroElasticsearchTemplate.buildBoolQuery(queryMapJson, null, null); } @@ -555,7 +396,6 @@ public class DocumentSearchServiceImpl implements IDocumentSearchService { null, pageNo-1, pageSize); -// JSONObject queryObject11 = jeroElasticsearchTemplate.buildQuery(null, jsonObject11,highlightMap,null, Integer.parseInt(map.get("pageNo").toString()), Integer.parseInt(map.get("pageSize").toString())); //2. 数据查询 JSONObject search = new JSONObject(); if(CutEnum.CN.getValue().equals(cut)){ @@ -575,11 +415,6 @@ public class DocumentSearchServiceImpl implements IDocumentSearchService { //二次搜索结果 List> mapListTwo = new ArrayList<>(); -// //如果勾选了列表数据,则先通过ids过滤一遍数据 -// if (list.size() != 0 && StringUtils.isNotBlank(searchVO.getIds())) { -// list = list.stream().filter(e -> searchVO.getIds().contains((String) e.get("id"))).collect(Collectors.toList()); -// } - List> listNew = new ArrayList<>(); for (Map stringObjectMap : list) { Map mapSource = (Map) stringObjectMap.get("_source"); @@ -675,11 +510,9 @@ public class DocumentSearchServiceImpl implements IDocumentSearchService { } } } - } } - //处理分页 IPage page = new Page(pageNo, pageSize); if (StringUtils.isNotBlank(selectValueTwo)) { @@ -782,7 +615,6 @@ public class DocumentSearchServiceImpl implements IDocumentSearchService { }else{ flagTemp = jeroElasticsearchTemplate.indexExists(SearchEnum.FULL_TEXT_SEARCH_EN.getValue()); } - if (!flagTemp) { return new Page(Integer.parseInt(map.get("pageNo").toString()), Integer.parseInt(map.get("pageSize").toString())); } @@ -795,40 +627,73 @@ public class DocumentSearchServiceImpl implements IDocumentSearchService { .collect(Collectors.toList()); List inputFieldList = inputOnlCgformFieldList.stream().map(OnlCgformField::getDbFieldName).collect(Collectors.toList()); inputFieldList.add("file_text");//在输入框的类型中添加正文字段 - //下拉,树形,日期等字段 - List otherOnlCgformFieldList = fieldList.stream() - .filter(e -> FieldTypeEnum.PULL_SINGLE.getValue().equals(e.getFieldShowType())//下拉单选 - || FieldTypeEnum.PULL_MORE.getValue().equals(e.getFieldShowType())//下拉多选 - || FieldTypeEnum.DATE_SINGLE.getValue().equals(e.getFieldShowType())//日期单选 - || FieldTypeEnum.DATE_MORE.getValue().equals(e.getFieldShowType())//日期多选 - || FieldTypeEnum.TREE.getValue().equals(e.getFieldShowType()))//树形 - .collect(Collectors.toList()); - List otherFieldList = otherOnlCgformFieldList.stream().map(OnlCgformField::getDbFieldName).collect(Collectors.toList()); Map mapOne = (Map) map.get("mapOne"); Map mapTwo = (Map) map.get("mapTwo"); - JSONArray must = new JSONArray(); - //处理首次查询条件 + + JSONArray queryMapJson = new JSONArray(); + JSONArray queryMapJsonTwo = new JSONArray(); + JSONArray queryMapJsonThree = new JSONArray(); + JSONArray queryMapJsonAll = new JSONArray(); + //首次查询条件 if (ObjectUtils.isNotEmpty(mapOne)) { - queryCondition(mapOne, inputFieldList, otherFieldList, must); + for (Map.Entry entry : mapOne.entrySet()) { + String key = entry.getKey(); + String value = (String) entry.getValue(); + if (ObjectUtils.isNotEmpty(value)) { + for (String s : value.split(",")) { + Map queryMap = new HashMap<>(); + Map queryMapTemp = new HashMap<>(); + queryMapTemp.put(key, s); + queryMap.put("match_phrase", queryMapTemp); + queryMapJson.add(queryMap); + } + } + } + if(CollectionUtils.isNotEmpty(queryMapJson)){ + JSONObject jsonObject = jeroElasticsearchTemplate.buildBoolQuery(null, null, queryMapJson); + queryMapJsonAll.add(jsonObject); + } } - //处理二次查询条件 - if (ObjectUtils.isNotEmpty(mapTwo)) { - queryCondition(mapTwo, inputFieldList, otherFieldList, must); - } - //处理ids - JSONArray should = new JSONArray(); + String ids = (String) mapTwo.get("ids"); + //二次查询条件 + if (ObjectUtils.isNotEmpty(mapTwo)) { + mapTwo.remove("ids"); + for (Map.Entry entry : mapTwo.entrySet()) { + String key = entry.getKey(); + String value = (String) entry.getValue(); + if (ObjectUtils.isNotEmpty(value)) { + for (String s : value.split(",")) { + Map queryMap = new HashMap<>(); + Map queryMapTemp = new HashMap<>(); + queryMapTemp.put(key, s); + queryMap.put("match_phrase", queryMapTemp); + queryMapJsonTwo.add(queryMap); + } + } + } + if(CollectionUtils.isNotEmpty(queryMapJsonTwo)){ + JSONObject jsonObject = jeroElasticsearchTemplate.buildBoolQuery(null, null, queryMapJsonTwo); + queryMapJsonAll.add(jsonObject); + } + } + + //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); - should.add(queryMap); + queryMapJsonThree.add(queryMap); } } + if(CollectionUtils.isNotEmpty(queryMapJsonThree)){ + JSONObject jsonObject = jeroElasticsearchTemplate.buildBoolQuery(null, null, queryMapJsonThree); + queryMapJsonAll.add(jsonObject); + } int pageNo = Integer.parseInt(map.get("pageNo").toString()); int pageSize = Integer.parseInt(map.get("pageSize").toString()); @@ -853,7 +718,7 @@ public class DocumentSearchServiceImpl implements IDocumentSearchService { String paragraphFlag = "paragraphFlag"; - IPage iPage = getiPage(selectValue, selectValueTwo, must, should, pageNo, pageSize, paragraphFlag,(String) map.get("cut")); + IPage iPage = getiPage(selectValue, selectValueTwo, queryMapJsonAll, null, pageNo, pageSize, paragraphFlag,(String) map.get("cut")); return iPage; }