feat: 搜索中心 动态字段自动匹配es查询
This commit is contained in:
@@ -19,7 +19,7 @@ public class SQLFilter {
|
||||
|
||||
for(int i$ = 0; i$ < len$; ++i$) {
|
||||
String keyword = arr$[i$];
|
||||
if (checkStr.indexOf(keyword) != -1) {
|
||||
if (checkStr.indexOf(keyword) != -1 && checkStr.indexOf("selectindex") == -1 && checkStr.indexOf("selectvalue") == -1) {
|
||||
throw new AdcDaBaseException("包含非法字符");
|
||||
}
|
||||
}
|
||||
|
||||
+19
-5
@@ -3,13 +3,14 @@ package com.adc.da.search.service.impl;
|
||||
import com.adc.da.search.entity.*;
|
||||
import com.adc.da.search.service.SearchCenterService;
|
||||
import com.adc.da.search.util.InitStandAttrSearchUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.sf.json.JSONObject;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.elasticsearch.action.search.SearchRequestBuilder;
|
||||
import org.elasticsearch.action.search.SearchResponse;
|
||||
import org.elasticsearch.action.search.SearchType;
|
||||
import org.elasticsearch.client.transport.TransportClient;
|
||||
import org.elasticsearch.common.collect.HppcMaps;
|
||||
import org.elasticsearch.common.text.Text;
|
||||
import org.elasticsearch.index.query.BoolQueryBuilder;
|
||||
import org.elasticsearch.index.query.QueryBuilder;
|
||||
@@ -22,6 +23,7 @@ import org.elasticsearch.search.aggregations.bucket.terms.StringTerms;
|
||||
import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;
|
||||
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
|
||||
import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;
|
||||
import org.json.JSONTokener;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
@@ -145,10 +147,10 @@ public class SearchCenterServiceImpl implements SearchCenterService {
|
||||
private BoolQueryBuilder querySeniorMsg(SeniorSearchInfoEO searchInfoEO, BoolQueryBuilder boolQueryBuilder) {
|
||||
BoolQueryBuilder boolQueryBuilderMust = new BoolQueryBuilder();
|
||||
String sarStandAttrEOStr = searchInfoEO.getSarStandAttrEOStr();
|
||||
Map<String, String> sarStandAttrMap = JSONObject.fromObject(sarStandAttrEOStr);
|
||||
Map<String, Object> sarStandAttrMap = net.sf.json.JSONObject.fromObject(sarStandAttrEOStr);
|
||||
|
||||
// MAP通过JAVA8新特性流过滤NULL值或对象
|
||||
Map<String, String> collectAttrMap = sarStandAttrMap.entrySet().stream().filter((e) -> e.getValue() != null).collect(Collectors.toMap(
|
||||
Map<String, Object> collectAttrMap = sarStandAttrMap.entrySet().stream().filter((e) -> e.getValue() != null && StringUtils.isNotBlank(e.getValue().toString())).collect(Collectors.toMap(
|
||||
Map.Entry::getKey,
|
||||
Map.Entry::getValue));
|
||||
|
||||
@@ -157,8 +159,20 @@ public class SearchCenterServiceImpl implements SearchCenterService {
|
||||
|
||||
// 动态存储属性字段 ---1
|
||||
for (String field : fieldInfoList) {
|
||||
if(collectAttrMap.containsKey(field)){
|
||||
boolQueryBuilderMust.must(QueryBuilders.fuzzyQuery(field, "*"+collectAttrMap.get(field)+"*"));
|
||||
if(collectAttrMap.containsKey(field.toLowerCase())){
|
||||
System.out.println(collectAttrMap.get(field.toLowerCase())+"----------------------------");
|
||||
List<String> fields = new ArrayList<>();
|
||||
Object json= new JSONTokener(collectAttrMap.get(field.toLowerCase()).toString()).nextValue();
|
||||
if(json instanceof org.json.JSONArray){
|
||||
fields = JSONObject.parseArray(collectAttrMap.get(field.toLowerCase()).toString(),String.class);
|
||||
}else {
|
||||
fields.add(collectAttrMap.get(field.toLowerCase()).toString());
|
||||
}
|
||||
if(!fields.isEmpty()){
|
||||
for (String str : fields) {
|
||||
boolQueryBuilderMust.must(QueryBuilders.fuzzyQuery(field, "*"+str+"*"));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user