feat: There is no way the

This commit is contained in:
super_liu
2021-10-25 11:55:32 +08:00
parent 3811b5f682
commit e7b2873362
4 changed files with 299 additions and 150 deletions
@@ -96,7 +96,11 @@ public class SearchCenterController extends BaseController<Map<String, Object>>
} }
return Result.success(getPageInfo(searchInfoEO.getPager(), result)); return Result.success(getPageInfo(searchInfoEO.getPager(), result));
} else { } else {
result = searchCenterService.searchSarBykey(searchInfoEO); if (searchInfoEO.getQueryStatus() != null && StringUtils.isNotBlank(searchInfoEO.getQueryStatus()) && searchInfoEO.getQueryStatus().equals("advancedSearch") && null != searchInfoEO.getSelectValue() && StringUtils.isNotBlank(searchInfoEO.getSelectValue())) {
result = searchCenterService.searchSarBykey(searchInfoEO);
}else {
result = searchCenterService.searchSarConditionBykey(searchInfoEO);
}
// 非动态消息的需要查询为我推荐 // 非动态消息的需要查询为我推荐
for (int i = 0; i < result.size(); i++) { for (int i = 0; i < result.size(); i++) {
String collectId = personCollectEOService.queryCollectByUserAndId(result.get(i).get("id").toString()); String collectId = personCollectEOService.queryCollectByUserAndId(result.get(i).get("id").toString());
@@ -239,6 +239,8 @@ public class SeniorSearchInfoEO extends BasePage {
private String stand_status; private String stand_status;
private String isHigh; private String isHigh;
private String queryStatus;
@@ -11,6 +11,8 @@ public interface SearchCenterService {
List<Map<String, Object>> searchSarBykey(SeniorSearchInfoEO searchInfoEO) throws Exception; List<Map<String, Object>> searchSarBykey(SeniorSearchInfoEO searchInfoEO) throws Exception;
List<Map<String, Object>> searchSarConditionBykey(SeniorSearchInfoEO searchInfoEO) throws Exception;
/** /**
* 查询结果集searchResponse装换成List形式 * 查询结果集searchResponse装换成List形式
* @param searchResponse 需要转换的数据 * @param searchResponse 需要转换的数据
@@ -37,6 +37,7 @@ import java.util.*;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream;
@Component @Component
@Slf4j @Slf4j
@@ -57,19 +58,11 @@ public class SearchCenterServiceImpl implements SearchCenterService {
private static final String ISSUE_TIME = "issue_time_data"; private static final String ISSUE_TIME = "issue_time_data";
private static final String PUT_TIME = "put_time"; private static final String PUT_TIME = "put_time";
private static final String EPOCH_MILLIS = "epoch_millis"; private static final String EPOCH_MILLIS = "epoch_millis";
String numbershowStr = "numbershow";
String nameshowStr = "nameshow";
String nameshowSplit = "nameshowSplit";
String numbershowSplit = "numbershowSplit";
String replacedStandNumStr = "replaced_stand_num";
String replaceStandNumStr = "replace_stand_num";
String content = "content";
//关键字检索 //关键字检索
@Override @Override
public List<Map<String, Object>> searchSarBykey(SeniorSearchInfoEO searchInfoEO) throws Exception { public List<Map<String, Object>> searchSarBykey(SeniorSearchInfoEO searchInfoEO) throws Exception {
//判断是否高级查询 isHight = truesearchInfoEO.getIsHigh()为空)时,证明不是高级查询 //判断是否高级查询 isHight = truesearchInfoEO.getIsHigh()为空)时,证明不是高级查询
boolean isHight = StringUtils.isBlank(searchInfoEO.getIsHigh());
List<Map<String, Object>> result = new ArrayList<>(); List<Map<String, Object>> result = new ArrayList<>();
SearchRequestBuilder searchRequestBuilder; SearchRequestBuilder searchRequestBuilder;
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
@@ -78,7 +71,7 @@ public class SearchCenterServiceImpl implements SearchCenterService {
searchRequestBuilder = client.prepareSearch(searchInfoEO.getSelectIndex()) searchRequestBuilder = client.prepareSearch(searchInfoEO.getSelectIndex())
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH) .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
.setFrom((searchInfoEO.getPage()-1)*searchInfoEO.getPageSize()) .setFrom((searchInfoEO.getPage()-1)*searchInfoEO.getPageSize())
.addSort("issueTime", SortOrder.DESC) .addSort("issueTime", SortOrder.DESC)
.setSize(searchInfoEO.getPageSize()); .setSize(searchInfoEO.getPageSize());
@@ -114,16 +107,7 @@ public class SearchCenterServiceImpl implements SearchCenterService {
.should(QueryBuilders.wildcardQuery("standSystem.keyword", "*"+searchInfoEO.getSelectValue()+"*")); .should(QueryBuilders.wildcardQuery("standSystem.keyword", "*"+searchInfoEO.getSelectValue()+"*"));
break; break;
case "laws": case "laws":
multiQueryBuilder = QueryBuilders.multiMatchQuery(searchInfoEO.getSelectValue(), boolQueryShould.should(QueryBuilders.wildcardQuery("CYSDShow", "*"+searchInfoEO.getSelectValue()+"*"))
numbershowSplit,nameshowSplit,nameshowStr,numbershowStr,"numberExpNull","standstateshow","countryShow", "natureShow", "replace_laws_num",
"synopsis","standEnName",replacedStandNumStr,"baseSearchContent",content,"CYSDShow","SYCLLXShow","standstateshow","ZRLXShow","stand_number","isRelateAccess","YQLXShow","SYCLLXShow","GXHBQShow","ZCGCSShow","FBJG","SVPPSName","XGBMShow","ZRBMShow","FOShow","GKGLBMShow","WSSFCYShow","replaceLawsNum","replacedLawsNum","XMPGJSShow","issue_time","ZCCSSRQ","XCXSSRQ","EOPSSRQ","XGLC","accessCountry").minimumShouldMatch("100%");
boolQueryMust.must(multiQueryBuilder);
boolQueryShould.should(QueryBuilders.wildcardQuery(nameshowStr, "*"+searchInfoEO.getSelectValue()+"*"))
.should(QueryBuilders.wildcardQuery(numbershowStr, "*"+searchInfoEO.getSelectValue()+"*"))
.should(QueryBuilders.wildcardQuery(numbershowSplit, "*"+searchInfoEO.getSelectValue()+"*"))
.should(QueryBuilders.wildcardQuery(nameshowSplit, "*"+searchInfoEO.getSelectValue()+"*"))
.should(QueryBuilders.wildcardQuery(content, "*"+searchInfoEO.getSelectValue()+"*"))
.should(QueryBuilders.wildcardQuery("CYSDShow", "*"+searchInfoEO.getSelectValue()+"*"))
.should(QueryBuilders.wildcardQuery("SYCLLXShow", "*"+searchInfoEO.getSelectValue()+"*")) .should(QueryBuilders.wildcardQuery("SYCLLXShow", "*"+searchInfoEO.getSelectValue()+"*"))
.should(QueryBuilders.wildcardQuery("accessCountry", "*"+searchInfoEO.getSelectValue()+"*")) .should(QueryBuilders.wildcardQuery("accessCountry", "*"+searchInfoEO.getSelectValue()+"*"))
.should(QueryBuilders.wildcardQuery("standstateshow", "*"+searchInfoEO.getSelectValue()+"*")) .should(QueryBuilders.wildcardQuery("standstateshow", "*"+searchInfoEO.getSelectValue()+"*"))
@@ -201,6 +185,136 @@ public class SearchCenterServiceImpl implements SearchCenterService {
return result; return result;
} }
// 条件
@Override
public List<Map<String, Object>> searchSarConditionBykey(SeniorSearchInfoEO searchInfoEO) throws Exception {
//判断是否高级查询 isHight = truesearchInfoEO.getIsHigh()为空)时,证明不是高级查询
boolean isHight = StringUtils.isBlank(searchInfoEO.getIsHigh());
List<Map<String, Object>> result = new ArrayList<>();
SearchRequestBuilder searchRequestBuilder;
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
BoolQueryBuilder boolQueryShould = QueryBuilders.boolQuery();
BoolQueryBuilder boolQueryMust = QueryBuilders.boolQuery();
searchRequestBuilder = client.prepareSearch(searchInfoEO.getSelectIndex())
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
.setFrom((searchInfoEO.getPage()-1)*searchInfoEO.getPageSize())
.addSort("issueTime", SortOrder.DESC)
.setSize(searchInfoEO.getPageSize());
if(searchInfoEO.getSelectIndex().equals("stand")) {
boolQueryShould = queryStandMsg(searchInfoEO,boolQueryMust,searchRequestBuilder);
} else if(searchInfoEO.getSelectIndex().equals("laws")){
boolQueryShould = queryLawsMsg(searchInfoEO,boolQueryMust,searchRequestBuilder);
} else if(searchInfoEO.getSelectIndex().equals("bussstand")){
boolQueryShould = queryBussStandMsg(searchInfoEO,boolQueryMust,searchRequestBuilder);
}
if(StringUtils.isNotEmpty(searchInfoEO.getSelectValue()) && StringUtils.isBlank(searchInfoEO.getIsHigh())){
QueryBuilder multiQueryBuilder;
switch (searchInfoEO.getSelectIndex()){
case "stand":
if (isRqFormat(searchInfoEO.getSelectValue())) {
Long starttime = dateFormatToStr(searchInfoEO.getSelectValue()).getTime();
Long endtime = dateFormatToStr(searchInfoEO.getSelectValue()).getTime();
RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery(ISSUE_TIME).format(EPOCH_MILLIS).from(starttime).to(endtime).includeLower(true).includeUpper(true);
boolQueryShould.should(rangeQueryBuilder);
}
boolQueryShould.should(QueryBuilders.wildcardQuery("standSort.keyword", "*"+searchInfoEO.getSelectValue()+"*"))
.should(QueryBuilders.wildcardQuery("standNumber.keyword", "*"+searchInfoEO.getSelectValue()+"*"))
.should(QueryBuilders.wildcardQuery("standYear.keyword", "*"+searchInfoEO.getSelectValue()+"*"))
.should(QueryBuilders.wildcardQuery("stand_name.keyword", "*"+searchInfoEO.getSelectValue()+"*"))
.should(QueryBuilders.wildcardQuery("standEnName.keyword", "*"+searchInfoEO.getSelectValue()+"*"))
.should(QueryBuilders.wildcardQuery("standNatureName.keyword", "*"+searchInfoEO.getSelectValue()+"*"))
.should(QueryBuilders.wildcardQuery("textStatusName.keyword", "*"+searchInfoEO.getSelectValue()+"*"))
.should(QueryBuilders.wildcardQuery("isRelateAccessName.keyword", "*"+searchInfoEO.getSelectValue()+"*"))
.should(QueryBuilders.wildcardQuery("numbershow.keyword", "*"+searchInfoEO.getSelectValue()+"*"))
.should(QueryBuilders.matchPhraseQuery("content", "*"+searchInfoEO.getSelectValue()+"*"))
.should(QueryBuilders.wildcardQuery("standSystem.keyword", "*"+searchInfoEO.getSelectValue()+"*"));
break;
case "laws":
boolQueryShould.should(QueryBuilders.wildcardQuery("CYSDShow", "*"+searchInfoEO.getSelectValue()+"*"))
.should(QueryBuilders.wildcardQuery("SYCLLXShow", "*"+searchInfoEO.getSelectValue()+"*"))
.should(QueryBuilders.wildcardQuery("accessCountry", "*"+searchInfoEO.getSelectValue()+"*"))
.should(QueryBuilders.wildcardQuery("standstateshow", "*"+searchInfoEO.getSelectValue()+"*"))
.should(QueryBuilders.wildcardQuery("ZRLXShow", "*"+searchInfoEO.getSelectValue()+"*"))
.should(QueryBuilders.wildcardQuery("isRelateAccess", "*"+searchInfoEO.getSelectValue()+"*"))
.should(QueryBuilders.wildcardQuery("YQLXShow", "*"+searchInfoEO.getSelectValue()+"*"))
.should(QueryBuilders.wildcardQuery("SYCLLXShow", "*"+searchInfoEO.getSelectValue()+"*"))
.should(QueryBuilders.wildcardQuery("GXHBQShow", "*"+searchInfoEO.getSelectValue()+"*"))
.should(QueryBuilders.wildcardQuery("XCXSSRQ", "*"+searchInfoEO.getSelectValue()+"*"))
.should(QueryBuilders.wildcardQuery("ZCCSSRQ", "*"+searchInfoEO.getSelectValue()+"*"))
.should(QueryBuilders.wildcardQuery("EOPSSRQ", "*"+searchInfoEO.getSelectValue()+"*"))
.should(QueryBuilders.wildcardQuery("ZCGCSShow", "*"+searchInfoEO.getSelectValue()+"*"))
.should(QueryBuilders.wildcardQuery("FBJG", "*"+searchInfoEO.getSelectValue()+"*"))
.should(QueryBuilders.wildcardQuery("SVPPSName", "*"+searchInfoEO.getSelectValue()+"*"))
.should(QueryBuilders.wildcardQuery("XGBMShow", "*"+searchInfoEO.getSelectValue()+"*"))
// .should(QueryBuilders.wildcardQuery("ZRBMName", "*"+searchInfoEO.getSelectValue()+"*"))
.should(QueryBuilders.wildcardQuery("ZRBMShow", "*"+searchInfoEO.getSelectValue()+"*"))
.should(QueryBuilders.wildcardQuery("FOShow", "*"+searchInfoEO.getSelectValue()+"*"))
.should(QueryBuilders.wildcardQuery("GKGLBMShow", "*"+searchInfoEO.getSelectValue()+"*"))
.should(QueryBuilders.wildcardQuery("content", "*"+searchInfoEO.getSelectValue()+"*"))
.should(QueryBuilders.wildcardQuery("WSSFCYShow", "*"+searchInfoEO.getSelectValue()+"*"))
.should(QueryBuilders.wildcardQuery("replaceLawsNum", "*"+searchInfoEO.getSelectValue()+"*"))
.should(QueryBuilders.wildcardQuery("replacedLawsNum", "*"+searchInfoEO.getSelectValue()+"*"))
.should(QueryBuilders.wildcardQuery("issue_time", "*"+searchInfoEO.getSelectValue()+"*"))
.should(QueryBuilders.wildcardQuery("XMPGJSShow", "*"+searchInfoEO.getSelectValue()+"*"))
.should(QueryBuilders.wildcardQuery("XGLC", "*"+searchInfoEO.getSelectValue()+"*"))
.should(QueryBuilders.wildcardQuery("stand_number", "*"+searchInfoEO.getSelectValue()+"*"));
break;
case "bussstand":
boolQueryShould.should(QueryBuilders.wildcardQuery("standSort.keyword", "*"+searchInfoEO.getSelectValue()+"*"))
.should(QueryBuilders.wildcardQuery("stand_code.keyword", "*"+searchInfoEO.getSelectValue()+"*"))
.should(QueryBuilders.wildcardQuery("standYear.keyword", "*"+searchInfoEO.getSelectValue()+"*"))
.should(QueryBuilders.wildcardQuery("stand_name.keyword", "*"+searchInfoEO.getSelectValue()+"*"))
.should(QueryBuilders.wildcardQuery("standEnName.keyword", "*"+searchInfoEO.getSelectValue()+"*"))
.should(QueryBuilders.wildcardQuery("textStatusBuss.keyword", "*"+searchInfoEO.getSelectValue()+"*"));
if (isRqFormat(searchInfoEO.getSelectValue())) {
Long starttime = dateFormatToStr(searchInfoEO.getSelectValue()).getTime();
Long endtime = dateFormatToStr(searchInfoEO.getSelectValue()).getTime();
RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery(ISSUE_TIME).format(EPOCH_MILLIS).from(starttime).to(endtime).includeLower(true).includeUpper(true);
boolQueryShould.should(rangeQueryBuilder);
RangeQueryBuilder rangeQueryBuilder2 = QueryBuilders.rangeQuery("put_time_data").format(EPOCH_MILLIS).from(starttime).to(endtime).includeLower(true).includeUpper(true);
boolQueryShould.should(rangeQueryBuilder2);
}
break;
default: break;
}
}
if(boolQueryShould!=null){
boolQueryBuilder.must(QueryBuilders.matchQuery("validFlag", 0));
if(StringUtils.isNotEmpty(searchInfoEO.getSelectValue())){
if (StringUtils.isNotBlank(searchInfoEO.getStandType())) {
boolQueryBuilder.must(QueryBuilders.wildcardQuery("standType.keyword", "*"+searchInfoEO.getStandType()+"*"));
}
if (StringUtils.isNotBlank(searchInfoEO.getStandSort())) {
boolQueryBuilder.must(QueryBuilders.wildcardQuery("numbershow.keyword", "*"+searchInfoEO.getStandSort()+" "+"*"));
}
if (StringUtils.isNotBlank(searchInfoEO.getTextStatus())) {
boolQueryBuilder.must(QueryBuilders.wildcardQuery("textStatus.keyword", "*"+searchInfoEO.getTextStatus()+"*"));
}
boolQueryBuilder.must(boolQueryShould);
}else {
boolQueryBuilder.must(boolQueryShould);
}
//在结果中检索
if (StringUtils.isNotEmpty(searchInfoEO.getResultKeyword()) && StringUtils.isNotBlank(searchInfoEO.getIsHigh())) {
QueryBuilder multiQuery = queryInResult(searchInfoEO);
boolQueryBuilder.must(multiQuery);
}
searchRequestBuilder.setQuery(boolQueryBuilder);
// 获取查询到的结果
result = countStandSearchResult(searchRequestBuilder,searchInfoEO);
}
return result;
}
private Date dateFormatToStr(String dateStr){ private Date dateFormatToStr(String dateStr){
Date date = new Date(); Date date = new Date();
try { try {
@@ -264,48 +378,40 @@ public class SearchCenterServiceImpl implements SearchCenterService {
} }
String fieldInfo = InitStandAttrSearchUtil.queryField; List<String> fieldList = getStringField();
String fieldLawsInfo = InitStandAttrSearchUtil.queryFieldLaws;
String fieldBussInfo = InitStandAttrSearchUtil.queryFieldBuss;
List<String> fieldInfoList = Arrays.asList(fieldInfo .split(",")).stream().map(s -> (s.trim())).collect(Collectors.toList());
List<String> fieldLawsInfoList = Arrays.asList(fieldLawsInfo .split(",")).stream().map(s -> (s.trim())).collect(Collectors.toList());
List<String> fieldBussInfoList = Arrays.asList(fieldBussInfo .split(",")).stream().map(s -> (s.trim())).collect(Collectors.toList());
List<String> fieldList = new ArrayList<>();
fieldList.addAll(fieldInfoList);
fieldList.addAll(fieldLawsInfoList);
fieldList.addAll(fieldBussInfoList);
// 自动匹配动态属性字段 es 查询 // 自动匹配动态属性字段 es 查询
for (String field : fieldList) { for (String field : fieldList) {
// 关键字查询属性字段 // 关键字查询属性字段
String keyWordField = field + ".keyword"; String keyWordField = field + ".keyword";
String keyWordField2 = field + "Name.keyword"; String keyWordField2 = field + "Name.keyword";
if(StringUtils.isNotEmpty(searchInfoEO.getSelectValue())){ if(collectAttrMap.containsKey(field)){
boolQueryBuilderMust.should(QueryBuilders.wildcardQuery(keyWordField2, "*"+searchInfoEO.getSelectValue()+"*")); List<String> fields = new ArrayList<>();
}else { Object json= new JSONTokener(collectAttrMap.get(field).toString()).nextValue();
if(collectAttrMap.containsKey(field)){ if(json instanceof org.json.JSONArray){
List<String> fields = new ArrayList<>(); fields = JSONObject.parseArray(collectAttrMap.get(field).toString(),String.class);
Object json= new JSONTokener(collectAttrMap.get(field).toString()).nextValue(); }else {
if(json instanceof org.json.JSONArray){ if(!json.equals("null")){
fields = JSONObject.parseArray(collectAttrMap.get(field).toString(),String.class); fields.add(collectAttrMap.get(field).toString());
}else {
if(!json.equals("null")){
fields.add(collectAttrMap.get(field).toString());
}
}
if(!fields.isEmpty()){
if(fields.size() > 1){
BoolQueryBuilder boolQueryBuilderShould = new BoolQueryBuilder();
fields.forEach(s -> {
boolQueryBuilderShould.should(QueryBuilders.wildcardQuery(keyWordField, "*"+s+"*"));
});
boolQueryBuilder.must(boolQueryBuilderShould);
}else {
boolQueryBuilderMust.must(QueryBuilders.wildcardQuery(keyWordField, "*"+fields.get(0)+"*"));
}
} }
} }
if(!fields.isEmpty()){
if(fields.size() > 1){
BoolQueryBuilder boolQueryBuilderShould = new BoolQueryBuilder();
fields.forEach(s -> {
boolQueryBuilderShould.should(QueryBuilders.wildcardQuery(keyWordField, "*"+s+"*"));
});
boolQueryBuilder.must(boolQueryBuilderShould);
}else {
boolQueryBuilderMust.must(QueryBuilders.wildcardQuery(keyWordField, "*"+fields.get(0)+"*"));
}
}
} }
// if(StringUtils.isNotEmpty(searchInfoEO.getSelectValue())){
//// boolQueryBuilderMust.should(QueryBuilders.wildcardQuery(keyWordField2, "*"+searchInfoEO.getSelectValue()+"*"));
// }else {
//
// }
} }
if(StringUtils.isNotEmpty(searchInfoEO.getSelectValue())) { if(StringUtils.isNotEmpty(searchInfoEO.getSelectValue())) {
boolQueryBuilder.should(boolQueryBuilderMust); boolQueryBuilder.should(boolQueryBuilderMust);
@@ -353,62 +459,75 @@ public class SearchCenterServiceImpl implements SearchCenterService {
return boolQueryBuilder; return boolQueryBuilder;
} }
private List<String> getStringField() {
String fieldInfo = InitStandAttrSearchUtil.queryField;
String fieldLawsInfo = InitStandAttrSearchUtil.queryFieldLaws;
String fieldBussInfo = InitStandAttrSearchUtil.queryFieldBuss;
List<String> fieldInfoList = Arrays.asList(fieldInfo .split(",")).stream().map(s -> (s.trim())).collect(Collectors.toList());
List<String> fieldLawsInfoList = Arrays.asList(fieldLawsInfo .split(",")).stream().map(s -> (s.trim())).collect(Collectors.toList());
List<String> fieldBussInfoList = Arrays.asList(fieldBussInfo .split(",")).stream().map(s -> (s.trim())).collect(Collectors.toList());
List<String> fieldList = new ArrayList<>();
fieldList.addAll(fieldInfoList);
fieldList.addAll(fieldLawsInfoList);
fieldList.addAll(fieldBussInfoList);
return fieldList;
}
//检索国内外标准数据 //检索国内外标准数据
public BoolQueryBuilder queryStandMsg(SeniorSearchInfoEO searchInfoEO, BoolQueryBuilder boolQueryBuilder, SearchRequestBuilder searchRequestBuilder) throws Exception{ public BoolQueryBuilder queryStandMsg(SeniorSearchInfoEO searchInfoEO, BoolQueryBuilder boolQueryBuilder, SearchRequestBuilder searchRequestBuilder) throws Exception{
String nameshowStr = "nameshow"; String nameshowStr = "nameshow";
// 高级搜索项,只针对标准 // 高级搜索项,只针对标准
if(searchInfoEO.getSelectValue() == null || searchInfoEO.getSelectValue().equals("")){
// 高级搜索项,只针对标准
if (StringUtils.isNotBlank(searchInfoEO.getStandType())) {
boolQueryBuilder.must(QueryBuilders.wildcardQuery("standType.keyword", "*"+searchInfoEO.getStandType()+"*"));
}
if (StringUtils.isNotBlank(searchInfoEO.getStandSort())) {
List<String> list = Arrays.asList(searchInfoEO.getStandSort().split(",")).stream().map(s -> (s.trim())).collect(Collectors.toList());
if(list.size() > 1){
BoolQueryBuilder boolQueryBuilderShould = new BoolQueryBuilder();
list.forEach(s -> {
boolQueryBuilderShould.should(QueryBuilders.wildcardQuery("numbershow.keyword", "*"+s+" "+"*"));
});
boolQueryBuilder.must(boolQueryBuilderShould);
}else {
boolQueryBuilder.must(QueryBuilders.wildcardQuery("numbershow.keyword", "*"+searchInfoEO.getStandSort()+" "+"*"));
}
}
if (StringUtils.isNotBlank(searchInfoEO.getStandNumber())) {
boolQueryBuilder.must(QueryBuilders.wildcardQuery("standNumber.keyword", "*"+searchInfoEO.getStandNumber()+"*"));
}
if (StringUtils.isNotBlank(searchInfoEO.getStandYear())) {
boolQueryBuilder.must(QueryBuilders.wildcardQuery("standYear.keyword", "*"+searchInfoEO.getStandYear()+"*"));
}
if (StringUtils.isNotBlank(searchInfoEO.getStandName())) {
boolQueryBuilder.must(QueryBuilders.wildcardQuery("standName.keyword", "*"+searchInfoEO.getStandName()+"*"));
}
if (StringUtils.isNotBlank(searchInfoEO.getStandEnName())) {
boolQueryBuilder.must(QueryBuilders.wildcardQuery("standEnName.keyword", "*"+searchInfoEO.getStandEnName()+"*"));
}
if (StringUtils.isNotBlank(searchInfoEO.getTextStatus())) { // 高级搜索项,只针对标准
boolQueryBuilder.must(QueryBuilders.wildcardQuery("textStatus.keyword", "*"+searchInfoEO.getTextStatus()+"*")); if (StringUtils.isNotBlank(searchInfoEO.getStandType())) {
boolQueryBuilder.must(QueryBuilders.wildcardQuery("standType.keyword", "*"+searchInfoEO.getStandType()+"*"));
}
if (StringUtils.isNotBlank(searchInfoEO.getStandSort())) {
List<String> list = Arrays.asList(searchInfoEO.getStandSort().split(",")).stream().map(s -> (s.trim())).collect(Collectors.toList());
if(list.size() > 1){
BoolQueryBuilder boolQueryBuilderShould = new BoolQueryBuilder();
list.forEach(s -> {
boolQueryBuilderShould.should(QueryBuilders.wildcardQuery("numbershow.keyword", "*"+s+" "+"*"));
});
boolQueryBuilder.must(boolQueryBuilderShould);
}else {
boolQueryBuilder.must(QueryBuilders.wildcardQuery("numbershow.keyword", "*"+searchInfoEO.getStandSort()+" "+"*"));
} }
}
if (StringUtils.isNotBlank(searchInfoEO.getStandNumber())) {
boolQueryBuilder.must(QueryBuilders.wildcardQuery("standNumber.keyword", "*"+searchInfoEO.getStandNumber()+"*"));
}
if (StringUtils.isNotBlank(searchInfoEO.getStandYear())) {
boolQueryBuilder.must(QueryBuilders.wildcardQuery("standYear.keyword", "*"+searchInfoEO.getStandYear()+"*"));
}
if (StringUtils.isNotBlank(searchInfoEO.getStandName())) {
boolQueryBuilder.must(QueryBuilders.wildcardQuery("standName.keyword", "*"+searchInfoEO.getStandName()+"*"));
}
if (StringUtils.isNotBlank(searchInfoEO.getStandEnName())) {
boolQueryBuilder.must(QueryBuilders.wildcardQuery("standEnName.keyword", "*"+searchInfoEO.getStandEnName()+"*"));
}
if (searchInfoEO.getIssueTime() != null) { if (StringUtils.isNotBlank(searchInfoEO.getTextStatus())) {
Long starttime = searchInfoEO.getIssueTime().getTime(); boolQueryBuilder.must(QueryBuilders.wildcardQuery("textStatus.keyword", "*"+searchInfoEO.getTextStatus()+"*"));
Long endtime = searchInfoEO.getIssueTime().getTime(); }
RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery(ISSUE_TIME).format(EPOCH_MILLIS).from(starttime).to(endtime).includeLower(true).includeUpper(true);
boolQueryBuilder.filter(rangeQueryBuilder);
}
if (StringUtils.isNotBlank(searchInfoEO.getIsRelateAccess())) { if (searchInfoEO.getIssueTime() != null) {
boolQueryBuilder.must(QueryBuilders.wildcardQuery("isRelateAccess.keyword", "*"+searchInfoEO.getIsRelateAccess()+"*")); Long starttime = searchInfoEO.getIssueTime().getTime();
} Long endtime = searchInfoEO.getIssueTime().getTime();
RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery(ISSUE_TIME).format(EPOCH_MILLIS).from(starttime).to(endtime).includeLower(true).includeUpper(true);
boolQueryBuilder.filter(rangeQueryBuilder);
}
if (StringUtils.isNotBlank(searchInfoEO.getStandNature())) { if (StringUtils.isNotBlank(searchInfoEO.getIsRelateAccess())) {
boolQueryBuilder.must(QueryBuilders.wildcardQuery("standNature.keyword", "*"+searchInfoEO.getStandNature()+"*")); boolQueryBuilder.must(QueryBuilders.wildcardQuery("isRelateAccess.keyword", "*"+searchInfoEO.getIsRelateAccess()+"*"));
} }
if (StringUtils.isNotBlank(searchInfoEO.getStandSystem())) { if (StringUtils.isNotBlank(searchInfoEO.getStandNature())) {
boolQueryBuilder.must(QueryBuilders.wildcardQuery("standSystem.keyword", "*"+searchInfoEO.getStandSystem()+"*")); boolQueryBuilder.must(QueryBuilders.wildcardQuery("standNature.keyword", "*"+searchInfoEO.getStandNature()+"*"));
} }
if (StringUtils.isNotBlank(searchInfoEO.getStandSystem())) {
boolQueryBuilder.must(QueryBuilders.wildcardQuery("standSystem.keyword", "*"+searchInfoEO.getStandSystem()+"*"));
} }
querySeniorMsg(searchInfoEO,boolQueryBuilder); querySeniorMsg(searchInfoEO,boolQueryBuilder);
@@ -625,51 +744,49 @@ public class SearchCenterServiceImpl implements SearchCenterService {
* boolQueryBuilder :must * boolQueryBuilder :must
* */ * */
public BoolQueryBuilder queryBussStandMsg(SeniorSearchInfoEO searchInfoEO, BoolQueryBuilder boolQueryBuilder, SearchRequestBuilder searchRequestBuilder) throws Exception{ public BoolQueryBuilder queryBussStandMsg(SeniorSearchInfoEO searchInfoEO, BoolQueryBuilder boolQueryBuilder, SearchRequestBuilder searchRequestBuilder) throws Exception{
if(searchInfoEO.getSelectValue() == null || searchInfoEO.getSelectValue().equals("")){
// 高级搜索项,只针对标准
if (StringUtils.isNotBlank(searchInfoEO.getStandSort())) {
boolQueryBuilder.must(QueryBuilders.wildcardQuery("standSort.keyword", "*"+searchInfoEO.getStandSort()+"*"));
}
if (StringUtils.isNotBlank(searchInfoEO.getStandCode())) {
boolQueryBuilder.must(QueryBuilders.wildcardQuery("standNumber.keyword", "*"+searchInfoEO.getStandCode()+"*"));
}
if (StringUtils.isNotBlank(searchInfoEO.getStandYear())) {
boolQueryBuilder.must(QueryBuilders.wildcardQuery("standYear.keyword", "*"+searchInfoEO.getStandYear()+"*"));
}
if (StringUtils.isNotBlank(searchInfoEO.getStandName())) {
boolQueryBuilder.must(QueryBuilders.wildcardQuery("stand_name.keyword", "*"+searchInfoEO.getStandName()+"*"));
}
if (StringUtils.isNotBlank(searchInfoEO.getStandEnName())) {
boolQueryBuilder.must(QueryBuilders.wildcardQuery("standEnName.keyword", "*"+searchInfoEO.getStandEnName()+"*"));
}
if (StringUtils.isNotBlank(searchInfoEO.getTextStatusBuss())) { // 高级搜索项,只针对标准
List<String> list = Arrays.asList(searchInfoEO.getTextStatusBuss().split(",")).stream().map(s -> (s.trim())).collect(Collectors.toList()); if (StringUtils.isNotBlank(searchInfoEO.getStandSort())) {
if(list.size() > 1){ boolQueryBuilder.must(QueryBuilders.wildcardQuery("standSort.keyword", "*"+searchInfoEO.getStandSort()+"*"));
BoolQueryBuilder boolQueryBuilderShould = new BoolQueryBuilder(); }
list.forEach(s -> { if (StringUtils.isNotBlank(searchInfoEO.getStandCode())) {
boolQueryBuilderShould.should(QueryBuilders.wildcardQuery("textStatusBuss.keyword", "*"+s+"*")); boolQueryBuilder.must(QueryBuilders.wildcardQuery("standNumber.keyword", "*"+searchInfoEO.getStandCode()+"*"));
}); }
boolQueryBuilder.must(boolQueryBuilderShould); if (StringUtils.isNotBlank(searchInfoEO.getStandYear())) {
}else { boolQueryBuilder.must(QueryBuilders.wildcardQuery("standYear.keyword", "*"+searchInfoEO.getStandYear()+"*"));
boolQueryBuilder.must(QueryBuilders.wildcardQuery("textStatusBuss.keyword", "*"+searchInfoEO.getTextStatusBuss()+"*")); }
} if (StringUtils.isNotBlank(searchInfoEO.getStandName())) {
} boolQueryBuilder.must(QueryBuilders.wildcardQuery("stand_name.keyword", "*"+searchInfoEO.getStandName()+"*"));
}
if (StringUtils.isNotBlank(searchInfoEO.getStandEnName())) {
boolQueryBuilder.must(QueryBuilders.wildcardQuery("standEnName.keyword", "*"+searchInfoEO.getStandEnName()+"*"));
}
if (searchInfoEO.getIssueTime() != null) { if (StringUtils.isNotBlank(searchInfoEO.getTextStatusBuss())) {
Long starttime = searchInfoEO.getIssueTime().getTime(); List<String> list = Arrays.asList(searchInfoEO.getTextStatusBuss().split(",")).stream().map(s -> (s.trim())).collect(Collectors.toList());
Long endtime = searchInfoEO.getIssueTime().getTime(); if(list.size() > 1){
RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery(ISSUE_TIME).format(EPOCH_MILLIS).from(starttime).to(endtime).includeLower(true).includeUpper(true); BoolQueryBuilder boolQueryBuilderShould = new BoolQueryBuilder();
boolQueryBuilder.filter(rangeQueryBuilder); list.forEach(s -> {
boolQueryBuilderShould.should(QueryBuilders.wildcardQuery("textStatusBuss.keyword", "*"+s+"*"));
});
boolQueryBuilder.must(boolQueryBuilderShould);
}else {
boolQueryBuilder.must(QueryBuilders.wildcardQuery("textStatusBuss.keyword", "*"+searchInfoEO.getTextStatusBuss()+"*"));
} }
}
if (searchInfoEO.getPutTime() != null) { if (searchInfoEO.getIssueTime() != null) {
Long starttime = searchInfoEO.getPutTime().getTime(); Long starttime = searchInfoEO.getIssueTime().getTime();
Long endtime = searchInfoEO.getPutTime().getTime(); Long endtime = searchInfoEO.getIssueTime().getTime();
RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("put_time_data").format(EPOCH_MILLIS).from(starttime).to(endtime).includeLower(true).includeUpper(true); RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery(ISSUE_TIME).format(EPOCH_MILLIS).from(starttime).to(endtime).includeLower(true).includeUpper(true);
boolQueryBuilder.filter(rangeQueryBuilder); boolQueryBuilder.filter(rangeQueryBuilder);
} }
if (searchInfoEO.getPutTime() != null) {
Long starttime = searchInfoEO.getPutTime().getTime();
Long endtime = searchInfoEO.getPutTime().getTime();
RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("put_time_data").format(EPOCH_MILLIS).from(starttime).to(endtime).includeLower(true).includeUpper(true);
boolQueryBuilder.filter(rangeQueryBuilder);
} }
querySeniorMsg(searchInfoEO,boolQueryBuilder); querySeniorMsg(searchInfoEO,boolQueryBuilder);
return boolQueryBuilder; return boolQueryBuilder;
@@ -679,22 +796,46 @@ public class SearchCenterServiceImpl implements SearchCenterService {
public QueryBuilder queryInResult(SeniorSearchInfoEO searchInfoEO){ public QueryBuilder queryInResult(SeniorSearchInfoEO searchInfoEO){
// 记录搜索记录到数据库中 // 记录搜索记录到数据库中
QueryBuilder multiQueryBuilder = QueryBuilders.multiMatchQuery(""); QueryBuilder multiQueryBuilder = QueryBuilders.multiMatchQuery("");
BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
List<String> fieldList = getStringField();
List<String> fieldNameList = new ArrayList<>();
String[] standStr = {"content","standSort","standNumber","standYear","stand_name","standEnName","standNatureName",
"textStatusName","isRelateAccessName","numbershow","standSystem"};
String[] lawsStr = {"content",
"standSort","stand_code","standYear","stand_name","standEnName","textStatusBuss"};
String[] bussstandStr = {"content","standSort","stand_code","standYear","stand_name","standEnName","textStatusBuss"};
for (String field : fieldList) {
// 关键字查询属性字段
String keyWordField2 = field + "Name";
fieldNameList.add(keyWordField2);
}
switch (searchInfoEO.getSelectIndex()){ switch (searchInfoEO.getSelectIndex()){
case "stand": case "stand":
multiQueryBuilder = QueryBuilders.multiMatchQuery(searchInfoEO.getSelectValue(), List<String> listStrings = Stream.of(standStr).collect(Collectors.toList());
numbershowSplit,nameshowSplit,numbershowStr,nameshowStr,"numberExpNull","standSortShow","standstateshow","countryShow","standEnName", listStrings.addAll(fieldNameList);
"synopsis","baseSearchContent",content,"CYSDShow","CLLXShow","standstateshow","ZRLXShow","stand_name","stand_number","citeStand","DTBJH","FGXXSXXXShow","CBBH","YYBJ","XGLC","synopsis","isRelateAccess","GKDWShow","CYSDShow","FBJGShow","ZRLXShow","GXHBQShow","GZZXXName","YQLXShow","FGWHRName","ZRBMName","XGBMShow","SVPPSName","FOShow","XMPGJSShow","BDTBZBH","BYYBJ","issue_time","ZCCSSRQ","XCXSSRQ","EOPSSRQ").minimumShouldMatch("100%"); String[] fieldArr = listStrings.stream().toArray(String[]::new);
multiQueryBuilder = QueryBuilders.multiMatchQuery(searchInfoEO.getSelectValue(),fieldArr
).minimumShouldMatch("100%");
// boolQueryBuilder.should();
// for (String field : fieldList) {
// // 关键字查询属性字段
// String keyWordField2 = field + "Name.keyword";
// boolQueryBuilder.should(QueryBuilders.multiMatchQuery(searchInfoEO.getSelectValue(),keyWordField2).minimumShouldMatch("100%"));
// }
break; break;
case "laws": case "laws":
multiQueryBuilder = QueryBuilders.multiMatchQuery(searchInfoEO.getSelectValue(), List<String> listStringLaws = Stream.of(lawsStr).collect(Collectors.toList());
numbershowSplit,nameshowSplit,nameshowStr,numbershowStr,"numberExpNull","standstateshow","countryShow", "natureShow", "replace_laws_num", listStringLaws.addAll(fieldNameList);
"synopsis","standEnName",replacedStandNumStr,"baseSearchContent",content,"CYSDShow","SYCLLXShow","standstateshow","ZRLXShow","stand_number","isRelateAccess","YQLXShow","SYCLLXShow","GXHBQShow","ZCGCSShow","FBJGShow","SVPPSName","XGBMShow","ZRBMShow","FOShow","GKGLBMShow","WSSFCYShow","replaceLawsNum","replacedLawsNum","XMPGJSShow","issue_time","ZCCSSRQ","XCXSSRQ","EOPSSRQ","XGLC").minimumShouldMatch("100%"); String[] fieldLawsArr = listStringLaws.stream().toArray(String[]::new);
multiQueryBuilder = QueryBuilders.multiMatchQuery(searchInfoEO.getSelectValue(),fieldLawsArr
).minimumShouldMatch("100%");
break; break;
case "bussstand": case "bussstand":
multiQueryBuilder = QueryBuilders.multiMatchQuery(searchInfoEO.getSelectValue(), List<String> listStringBussstand = Stream.of(bussstandStr).collect(Collectors.toList());
numbershowSplit,nameshowSplit,numbershowStr,nameshowStr,"numberExpNull","standstateshow", "standEnName",replaceStandNumStr, listStringBussstand.addAll(fieldNameList);
replacedStandNumStr,"countryShow","synopsis","standSortShow","ZQCBMShow","ZQCBM","stand_status", String[] fieldBussstandArr = listStringBussstand.stream().toArray(String[]::new);
"baseSearchContent",content,"numbershow","nameshow","standstateshow","issue_time","replaceStandNum","replacedStandNum","QBMJShow","QBSQShow","XHQBMShow","SVPPSName","XGBMName","ZYQCRShow","ZRBMShow","ZQCBMName","QTQCRShow","content","FSRQString","FZRQString","put_time","XGLC","WFSPJSName").minimumShouldMatch("100%"); multiQueryBuilder = QueryBuilders.multiMatchQuery(searchInfoEO.getSelectValue(),fieldBussstandArr
).minimumShouldMatch("100%");
break; break;
default: break; default: break;
} }