一般检索(全文)添加

This commit is contained in:
梁琦涛
2023-11-22 09:55:38 +08:00
parent c2b0e6c59e
commit 9ce138b3d2
@@ -42,8 +42,6 @@ import com.jero.modules.laws.standard.service.ILawsNewsFeedService;
import com.jero.modules.laws.standard.service.ILawsOverseasStandardService;
import com.jero.modules.oss.entity.OSSFile;
import com.jero.modules.oss.service.IOSSFileService;
import com.jero.modules.system.service.ISysDepartService;
import com.jero.modules.system.service.ISysUserService;
import com.jero.modules.tag.entity.LawsTag;
import com.jero.modules.tag.service.ILawsTagService;
import lombok.extern.slf4j.Slf4j;
@@ -351,96 +349,100 @@ public class LawsHomeSearchServiceImpl implements ILawsHomeSearchService {
LawsHomeNormalSearchStatisticsVO obj = new LawsHomeNormalSearchStatisticsVO();
switch (lawsHomeNormalSearchDTO.getResourceType()){
case LawsHomeSearchCommon.LAWS_DOMESTIC_STANDARD:
count1(queryWrapper,obj);
List<LawsHomeNormalSearchCountVO> list1 = lawsHomeSearchMapper.getCount1(queryWrapper);
count1(list1,obj);
break;
case LawsHomeSearchCommon.LAWS_OVERSEAS_STANDARD:
count2(queryWrapper,obj);
List<LawsHomeNormalSearchCountVO> list2 = lawsHomeSearchMapper.getCount2(queryWrapper);
count2(list2,obj);
break;
case LawsHomeSearchCommon.LAWS_ENTERPRISE_STANDARD:
count3(queryWrapper,obj);
List<LawsHomeNormalSearchCountVO> list3 = lawsHomeSearchMapper.getCount2(queryWrapper);
count3(list3,obj);
break;
default:break;
}
return obj;
}
private void count3(QueryWrapper<LawsHomeNormalSearchDTO> queryWrapper,LawsHomeNormalSearchStatisticsVO obj) {
List<LawsHomeNormalSearchCountVO> list = lawsHomeSearchMapper.getCount2(queryWrapper);
private void count3(List<LawsHomeNormalSearchCountVO> list,LawsHomeNormalSearchStatisticsVO obj) {
// 企业标准代号
List<LawsHomeNormalSearchStatisticsObjVO> list1 = addLawsHomeNormalSearchStatistics(list, obj, "enterprise_standard_code", "standard_code");
List<LawsHomeNormalSearchStatisticsObjVO> list1 = addLawsHomeNormalSearchStatistics(list, "enterprise_standard_code", "standard_code");
if(!CollectionUtils.isEmpty(list1)){
obj.setStandardCode(list1);
}
// 标准状态
List<LawsHomeNormalSearchStatisticsObjVO> list2 = addLawsHomeNormalSearchStatistics(list, obj, "enterprise_standard_state", "standard_state");
List<LawsHomeNormalSearchStatisticsObjVO> list2 = addLawsHomeNormalSearchStatistics(list, "enterprise_standard_state", "standard_state");
if(!CollectionUtils.isEmpty(list2)){
obj.setEnterpriseStandardState(list2);
}
// 标准等级分类
List<LawsHomeNormalSearchStatisticsObjVO> list3 = addLawsHomeNormalSearchStatistics(list, obj, "standard_grade_classify", "grade_classification");
List<LawsHomeNormalSearchStatisticsObjVO> list3 = addLawsHomeNormalSearchStatistics(list,"standard_grade_classify", "grade_classification");
if(!CollectionUtils.isEmpty(list3)){
obj.setGradeClassification(list3);
}
}
private void count2(QueryWrapper<LawsHomeNormalSearchDTO> queryWrapper,LawsHomeNormalSearchStatisticsVO obj) {
List<LawsHomeNormalSearchCountVO> list = lawsHomeSearchMapper.getCount2(queryWrapper);
private void count2(List<LawsHomeNormalSearchCountVO> list,LawsHomeNormalSearchStatisticsVO obj) {
// 标准类别
List<LawsHomeNormalSearchStatisticsObjVO> list1 = addLawsHomeNormalSearchStatistics(list, obj, "standard_type_overseas", "standard_class");
List<LawsHomeNormalSearchStatisticsObjVO> list1 = addLawsHomeNormalSearchStatistics(list, "standard_type_overseas", "standard_class");
if(!CollectionUtils.isEmpty(list1)){
obj.setStandardClass(list1);
}
// 适用车辆类型
List<LawsHomeNormalSearchStatisticsObjVO> list2 = addLawsHomeNormalSearchStatistics(list, obj, "APPLICATIONS_OVERSEAS", "applicable_vehicle");
List<LawsHomeNormalSearchStatisticsObjVO> list2 = addLawsHomeNormalSearchStatistics(list, "APPLICATIONS_OVERSEAS", "applicable_vehicle");
if(!CollectionUtils.isEmpty(list2)){
obj.setApplicableVehicle(list2);
}
// 状态
List<LawsHomeNormalSearchStatisticsObjVO> list3 = addLawsHomeNormalSearchStatistics(list, obj, "standard_state", "standard_state");
List<LawsHomeNormalSearchStatisticsObjVO> list3 = addLawsHomeNormalSearchStatistics(list, "standard_state", "standard_state");
if(!CollectionUtils.isEmpty(list3)){
obj.setStandardState(list3);
}
}
private void count1(QueryWrapper<LawsHomeNormalSearchDTO> queryWrapper,LawsHomeNormalSearchStatisticsVO obj) {
List<LawsHomeNormalSearchCountVO> list = lawsHomeSearchMapper.getCount1(queryWrapper);
private void count1(List<LawsHomeNormalSearchCountVO> list, LawsHomeNormalSearchStatisticsVO obj) {
// 标准类别
List<LawsHomeNormalSearchStatisticsObjVO> list1 = addLawsHomeNormalSearchStatistics(list, obj, "standard_type", "standard_class");
List<LawsHomeNormalSearchStatisticsObjVO> list1 = addLawsHomeNormalSearchStatistics(list,"standard_type", "standard_class");
if(!CollectionUtils.isEmpty(list1)){
obj.setStandardClass(list1);
}
// 动力类型
List<LawsHomeNormalSearchStatisticsObjVO> list2 = addLawsHomeNormalSearchStatistics(list, obj, "dynamic_type", "dynamic_type");
List<LawsHomeNormalSearchStatisticsObjVO> list2 = addLawsHomeNormalSearchStatistics(list, "POWER_TYPE_DOMESTIC", "dynamic_type");
if(!CollectionUtils.isEmpty(list2)){
obj.setDynamicType(list2);
}
// 适用车辆类型
List<LawsHomeNormalSearchStatisticsObjVO> list3 = addLawsHomeNormalSearchStatistics(list, obj, "APPLICATIONS_DOMESTIC", "applicable_vehicle");
List<LawsHomeNormalSearchStatisticsObjVO> list3 = addLawsHomeNormalSearchStatistics(list,"APPLICATIONS_DOMESTIC", "applicable_vehicle");
if(!CollectionUtils.isEmpty(list3)){
obj.setApplicableVehicle(list3);
}
// 标准类型
List<LawsHomeNormalSearchStatisticsObjVO> list4 = addLawsHomeNormalSearchStatistics(list, obj, "standard_property", "standard_property");
List<LawsHomeNormalSearchStatisticsObjVO> list4 = addLawsHomeNormalSearchStatistics(list, "standard_property", "standard_property");
if(!CollectionUtils.isEmpty(list4)){
obj.setStandardProperty(list4);
}
// 状态
List<LawsHomeNormalSearchStatisticsObjVO> list5 = addLawsHomeNormalSearchStatistics(list, obj, "standard_state", "standard_state");
List<LawsHomeNormalSearchStatisticsObjVO> list5 = addLawsHomeNormalSearchStatistics(list,"standard_state", "standard_state");
if(!CollectionUtils.isEmpty(list5)){
obj.setStandardState(list5);
}
}
private List<LawsHomeNormalSearchStatisticsObjVO> addLawsHomeNormalSearchStatistics(List<LawsHomeNormalSearchCountVO> list, LawsHomeNormalSearchStatisticsVO obj, String dictVal, String data) {
private List<LawsHomeNormalSearchStatisticsObjVO> addLawsHomeNormalSearchStatistics(List<LawsHomeNormalSearchCountVO> list, String dictVal, String data) {
List<DictModel> listStandardClass = sysBaseAPI.getDictItems(dictVal);
List<LawsHomeNormalSearchStatisticsObjVO> listDict = new ArrayList<>();
for (DictModel dict : listStandardClass) {
LawsHomeNormalSearchStatisticsObjVO objVO = new LawsHomeNormalSearchStatisticsObjVO();
objVO.setItemText(dict.getText());
objVO.setItemValue(dict.getValue());
Optional<LawsHomeNormalSearchCountVO> op = list.stream().filter(o -> !StringUtils.isBlank(o.getDict()) && Arrays.asList(o.getDict().split(",")).contains(dict.getValue()) && Objects.equals(o.getFieldName(),data)).findFirst();
if(op.isPresent()){
objVO.setStatisticsCount(op.get().getCount());
if(!CollectionUtils.isEmpty(list)){
Optional<LawsHomeNormalSearchCountVO> op = list.stream().filter(o -> !StringUtils.isBlank(o.getDict()) && Arrays.asList(o.getDict().split(",")).contains(dict.getValue()) && Objects.equals(o.getFieldName(),data)).findFirst();
if(op.isPresent()){
objVO.setStatisticsCount(op.get().getCount());
}else{
objVO.setStatisticsCount("0");
}
}else{
objVO.setStatisticsCount("0");
}
@@ -479,40 +481,71 @@ public class LawsHomeSearchServiceImpl implements ILawsHomeSearchService {
}
String selectValue = searchVO.getSelectValue();
//1. 需要查询的字段
List<String> fieldList = new ArrayList<>();
fieldList.add("content");//权重1
// List<String> fieldList = new ArrayList<>();
// fieldList.add("content");//权重1
Map<String,String> mapDict = new HashMap<>();
if(!StringUtils.isBlank(homeNormalSearchDTO.getResourceType())){
mapDict.put("resource_type",homeNormalSearchDTO.getResourceType());
}
if(!StringUtils.isBlank(homeNormalSearchDTO.getStandardClass())){
mapDict.put("standard_class",homeNormalSearchDTO.getStandardClass());
}
if(!StringUtils.isBlank(homeNormalSearchDTO.getDynamicType())){
mapDict.put("dynamic_type",homeNormalSearchDTO.getDynamicType());
}
if(!StringUtils.isBlank(homeNormalSearchDTO.getApplicableVehicle())){
mapDict.put("applicable_vehicle",homeNormalSearchDTO.getApplicableVehicle());
}
if(!StringUtils.isBlank(homeNormalSearchDTO.getStandardProperty())){
mapDict.put("standard_property",homeNormalSearchDTO.getStandardProperty());
}
if(!StringUtils.isBlank(homeNormalSearchDTO.getStandardState())){
mapDict.put("standard_state",homeNormalSearchDTO.getStandardState());
}
if(!StringUtils.isBlank(homeNormalSearchDTO.getStandardCode())){
mapDict.put("standard_code",homeNormalSearchDTO.getStandardCode());
}
if(!StringUtils.isBlank(homeNormalSearchDTO.getEnterpriseStandardState())){
mapDict.put("enterprise_standard_state",homeNormalSearchDTO.getEnterpriseStandardState());
}
if(!StringUtils.isBlank(homeNormalSearchDTO.getGradeClassification())){
mapDict.put("grade_classification",homeNormalSearchDTO.getGradeClassification());
}
JSONObject jsonAll = new JSONObject();
JSONArray queryMapJsonAll = new JSONArray();
JSONArray queryMapJsonDict = new JSONArray();
mapDict.forEach((k,v)->{
Map<String, Object> map1 = new HashMap<>();
Map<String, Object> map2 = new HashMap<>();
map2.put(k,v);
map1.put("match_phrase",map2);
queryMapJsonDict.add(map1);
});
JSONArray queryMapJson = new JSONArray();
JSONArray queryMapJsonAll = new JSONArray();
Map<String,Object> mapHighlight = new HashMap<>();
Map<String,Object> mapHighlight1 = new HashMap<>();
//封装首次的条件
// 封装首次的条件
if (StringUtils.isNotBlank(selectValue)) {
selectValue = selectValue.toLowerCase();
for (String field : fieldList) {
getQueryMapJson(queryMapJson, selectValue, field);
//高亮
if(!"flag".equals(field)){
highlight(mapHighlight, field);
} else {
// query_string查询
Map<String, Object> map25 = new HashMap<>();
Map<String, Object> map45 = new HashMap<>();
map25.put("query", selectValue);
map25.put("fields", fieldList.toArray());
map25.put("allow_leading_wildcard", false); //禁用了前置通配符
map45.put("query_string", map25);
queryMapJson.add(map45);
}
}
getQueryMapJson(queryMapJson, selectValue, "content");
//高亮
highlight(mapHighlight, "content");
mapHighlight1.put("fields",mapHighlight);
}
if(CollectionUtils.isNotEmpty(queryMapJson)){
JSONObject jsonObject = jeroElasticsearchTemplate.buildBoolQuery(null, null, queryMapJson);
queryMapJsonAll.add(jsonObject);
queryMapJsonDict.add(jsonObject);
}
if(CollectionUtils.isNotEmpty(queryMapJsonDict)){
jsonAll.put("must",queryMapJsonDict);
JSONObject all = new JSONObject();
all.put("bool",jsonAll);
queryMapJsonAll.add(all);
}
JSONObject sort = new JSONObject();
Map<String,Object> issueTimeDesc = new HashMap<>();
@@ -522,8 +555,6 @@ public class LawsHomeSearchServiceImpl implements ILawsHomeSearchService {
issueTimeAsc.put("order","asc");
issueTime.put("resource_type",issueTimeAsc);
issueTime.put("standard_type",issueTimeDesc);
// todo 排序号
// issueTime.put("resource_type",issueTime);
issueTime.put("create_time",issueTimeDesc);
sort.putAll(issueTime);
IPage page = getIPage(selectValue, queryMapJsonAll, mapHighlight1,
@@ -659,7 +690,106 @@ public class LawsHomeSearchServiceImpl implements ILawsHomeSearchService {
@Override
public LawsHomeNormalSearchStatisticsVO getNormalSearchAllCount(LawsHomeNormalSearchDTO homeNormalSearchDTO) {
return null;
LawsHomeNormalSearchStatisticsVO obj = new LawsHomeNormalSearchStatisticsVO();
String searchContent = homeNormalSearchDTO.getSearchContent();
if(StringUtils.isBlank(searchContent)){
throw new JeroBootException(ResultCommon.PLEASE_SEARCH_TO_IMPORT);
}
//判断索引是否存在
boolean flagTemp;
flagTemp = jeroElasticsearchTemplate.indexExists(HomeSearchEnum.INDEX_NAME_DOCUMENT_ZQ.getValue());
if (!flagTemp) {
return obj;
}
SearchVO searchVO = new SearchVO();
searchVO.setSelectValue(homeNormalSearchDTO.getSearchContent());
if(StringUtils.isBlank(searchVO.getSelectValue())){
searchVO.setSelectValue(SEARCH_FLAG);
}
String selectValue = searchVO.getSelectValue().toLowerCase();
List<String> listField = new ArrayList<>();
listField.add("resource_type");
listField.add("standard_class");
listField.add("dynamic_type");
listField.add("applicable_vehicle");
listField.add("standard_property");
listField.add("standard_state");
listField.add("standard_code");
listField.add("enterprise_standard_state");
listField.add("grade_classification");
JSONObject jsonObject = new JSONObject();
Map<String, Object> map = new HashMap<>();
for (String s : listField) {
Map<String, Object> map1 = new HashMap<>();
Map<String, Object> map2 = new HashMap<>();
map1.put("field",s + ".keyword");
map2.put("terms",map1);
map.put(s + "_aggs",map2);
}
jsonObject.put("aggs",map);
jsonObject.put("size",0);
// JSONArray queryMapJson = new JSONArray();
// // 封装首次的条件
// if (StringUtils.isNotBlank(selectValue)) {
// getQueryMapJson(queryMapJson, selectValue, "content");
// }
// if(CollectionUtils.isNotEmpty(queryMapJson)){
// JSONObject object = new JSONObject();
// object.put("should",queryMapJson);
// jsonObject.put("query",object);
// }
//2. 数据查询
JSONObject search = jeroElasticsearchTemplate.search(HomeSearchEnum.INDEX_NAME_DOCUMENT_ZQ.getValue(), HomeSearchEnum.TYPE_NAME_DOCUMENT_ZQ.getValue(), jsonObject);
LawsHomeNormalSearchStatisticsVO objVo = new LawsHomeNormalSearchStatisticsVO();
switch (homeNormalSearchDTO.getResourceType()){
case LawsHomeSearchCommon.LAWS_DOMESTIC_STANDARD:
List<LawsHomeNormalSearchCountVO> list1 = new ArrayList<>();
addVo(search, list1, "standard_class_aggs", "standard_class");
addVo(search, list1, "dynamic_type_aggs", "dynamic_type");
addVo(search, list1, "applicable_vehicle_aggs", "applicable_vehicle");
addVo(search, list1, "standard_property_aggs", "standard_property");
addVo(search, list1, "standard_state_aggs", "standard_state");
count1(list1,objVo);
break;
case LawsHomeSearchCommon.LAWS_OVERSEAS_STANDARD:
List<LawsHomeNormalSearchCountVO> list2 = new ArrayList<>();
addVo(search, list2, "standard_class_aggs", "standard_class");
addVo(search, list2, "applicable_vehicle_aggs", "applicable_vehicle");
addVo(search, list2, "standard_state_aggs", "standard_state");
count2(list2,objVo);
break;
case LawsHomeSearchCommon.LAWS_ENTERPRISE_STANDARD:
List<LawsHomeNormalSearchCountVO> list3 = new ArrayList<>();
addVo(search, list3, "standard_code_aggs", "standard_code");
addVo(search, list3, "standard_state_aggs", "standard_state");
addVo(search, list3, "grade_classification_aggs", "grade_classification");
count3(list3,objVo);
break;
default:break;
}
return objVo;
}
private void addVo(JSONObject search, List<LawsHomeNormalSearchCountVO> list, String standard_class_aggs, String standard_class) {
List<Map<String, Object>> list1 = (List<Map<String, Object>>) ((Map) ((Map) search.get("aggregations")).get(standard_class_aggs)).get("buckets");
if (!CollectionUtils.isEmpty(list1)) {
for (Map<String, Object> stringObjectMap : list1) {
LawsHomeNormalSearchCountVO objVo = new LawsHomeNormalSearchCountVO();
if (Objects.isNull(stringObjectMap.get("key"))) {
continue;
}
objVo.setFieldName(standard_class);
objVo.setDict(stringObjectMap.get("key").toString());
objVo.setCount(Objects.isNull(stringObjectMap.get("doc_count")) ? "0" : stringObjectMap.get("doc_count").toString());
list.add(objVo);
}
}
}
@Override
@@ -669,6 +799,12 @@ public class LawsHomeSearchServiceImpl implements ILawsHomeSearchService {
}
log.info("================ES更新数据开始=================");
try{
//判断索引是否存在
boolean flagTemp;
flagTemp = jeroElasticsearchTemplate.indexExists(HomeSearchEnum.INDEX_NAME_DOCUMENT_ZQ.getValue());
if (!flagTemp) {
jeroElasticsearchTemplate.createIndex(HomeSearchEnum.INDEX_NAME_DOCUMENT_ZQ.getValue());
}
switch (resourceType){
case LawsHomeSearchCommon.LAWS_DOMESTIC_STANDARD:
updateLawsDomesticStandardToEs(resourceType,ids,opType);