Merge branch 'develop_migration' into 'develop_master'

feat: There is no way the, 优化ES 权重 全文搜索

See merge request LiuChao/foton-slrs-system-rest!456
This commit is contained in:
super_liu
2022-04-28 14:02:44 +08:00
2 changed files with 88 additions and 55 deletions
@@ -84,7 +84,7 @@ public class SearchCenterController extends BaseController<Map<String, Object>>
if (StringUtils.isAlphanumericSpace(searchInfoEO.getSelectIndex())) { if (StringUtils.isAlphanumericSpace(searchInfoEO.getSelectIndex())) {
if(elasticsearchService.isIndexExist(searchInfoEO.getSelectIndex())){ if(elasticsearchService.isIndexExist(searchInfoEO.getSelectIndex())){
if("fulltextserch".equals(searchInfoEO.getSelectIndex()) || "fulltextserch"== searchInfoEO.getSelectIndex()){ if("fulltextserch".equals(searchInfoEO.getSelectIndex()) || "fulltextserch"== searchInfoEO.getSelectIndex()){
Pattern pattern = Pattern.compile("^[0-9a-zA-Z\\.\\(\\(\\)\\)\\s\\/\\-]+$"); Pattern pattern = Pattern.compile("^[0-9a-zA-Z\\.\\(\\(\\)\\)\\s\\/\\-\\:]+$");
if (null != searchInfoEO.getSelectValue() && StringUtils.isNotBlank(searchInfoEO.getSelectValue())) { if (null != searchInfoEO.getSelectValue() && StringUtils.isNotBlank(searchInfoEO.getSelectValue())) {
if (pattern.matcher(searchInfoEO.getSelectValue()).matches()) { if (pattern.matcher(searchInfoEO.getSelectValue()).matches()) {
result = searchCenterService.searchSarBykeyAndHighLightNumber(searchInfoEO); result = searchCenterService.searchSarBykeyAndHighLightNumber(searchInfoEO);
@@ -1298,10 +1298,43 @@ public class SearchCenterServiceImpl implements SearchCenterService {
value = searchInfoEO.getSelectValue().substring(0, num).trim(); value = searchInfoEO.getSelectValue().substring(0, num).trim();
select = searchInfoEO.getSelectValue().substring(num + 1).trim(); select = searchInfoEO.getSelectValue().substring(num + 1).trim();
real = value + " " + select; real = value + " " + select;
}else{
String reg = ".*[0-9].*";
if("-".contains(real)){
String content = real.split("-")[0];
value = content.replaceAll("[^(A-Za-z\\/)]", "");
String[] valArr = value.split("\\/");
if (valArr.length > 2) {
value = valArr[0] + "/" + valArr[1];
select = content.replaceAll("[^(0-9a-zA-Z\\.\\(\\(\\)\\)\\s\\/\\-\\:)]", "").replaceAll(value,"");
}else{
value = valArr[0];
select = real.replaceAll("[^(0-9a-zA-Z\\.\\(\\(\\)\\)\\s\\/\\-\\:)]", "").replaceAll(value,"");
}
real = value + " " + select;
}else if(real.matches(reg)){
value = real.replaceAll("[^(A-Za-z\\/)]", "");
String[] valArr = value.split("\\/");
if (valArr.length > 2) {
value = valArr[0] + "/" + valArr[1];
String[] str = real.split(value);
String sel = str[1].replaceAll("[^(0-9\\.\\(\\(\\)\\)\\s\\/\\-\\:)]", "");
String[] valArr2 = sel.split("\\/");
if(valArr2.length > 2){
select = valArr2[0] + '/' + valArr[3] + valArr2[1];
}else {
select = sel;
}
}else{
value = valArr[0];
select = real.replaceAll("[^(0-9a-zA-Z\\.\\(\\(\\)\\)\\s\\/\\-\\:)]", "").replaceAll(value,"");
}
real = value + " " + select;
}else { }else {
value = real; value = real;
select = ""; select = "";
} }
}
searchInfoEO.setSelectValue(select); searchInfoEO.setSelectValue(select);
List<Map<String, Object>> result = new ArrayList<>(); List<Map<String, Object>> result = new ArrayList<>();
SearchRequestBuilder searchRequestBuilder; SearchRequestBuilder searchRequestBuilder;
@@ -1316,23 +1349,6 @@ public class SearchCenterServiceImpl implements SearchCenterService {
//判断标准号是否企标SMTC ,标准列别 (),/,字母 //判断标准号是否企标SMTC ,标准列别 (),/,字母
Pattern pattern = Pattern.compile("^[a-zA-Z\\/\\(\\)\\(\\)]+$"); Pattern pattern = Pattern.compile("^[a-zA-Z\\/\\(\\)\\(\\)]+$");
if (pattern.matcher(value).matches()) { if (pattern.matcher(value).matches()) {
//符合标准类别
if ("SMTC".equals(value)) {
//符合标准SMTC
//判断是否带有年份
Pattern patternbianhao = Pattern.compile("^[0-9a-zA-Z\\.\\(\\(\\)\\)\\-\\s]+$");
if (patternbianhao.matcher(select).matches()) {
// 拆分年份,当无“-”时,也生成selects
selects = select.replace(" ","-").replace("(","-\\(-").replace(")","-\\)-").replace("(","-\\(-").replace(")","-\\)-").split("-");
}else{
//wildcard查询real
selects = select.replace(" ","-").replace("(","-\\(-").replace(")","-\\)-").replace("(","-\\(-").replace(")","-\\)-").split("-");
// isReal = true;
// value = null;
// selects = null;
}
} else {
//不符合标准SMTC
Pattern patternbianhao = Pattern.compile("^[0-9a-zA-Z\\.\\(\\(\\)\\)\\-\\s]+$"); Pattern patternbianhao = Pattern.compile("^[0-9a-zA-Z\\.\\(\\(\\)\\)\\-\\s]+$");
if (patternbianhao.matcher(select).matches()) { if (patternbianhao.matcher(select).matches()) {
//符合标准编号 //符合标准编号
@@ -1341,7 +1357,6 @@ public class SearchCenterServiceImpl implements SearchCenterService {
//不符合标准编号 使用wildcard查询 编号 //不符合标准编号 使用wildcard查询 编号
selects = select.replace(" ","-").split("-"); selects = select.replace(" ","-").split("-");
} }
}
} else { } else {
//不符合标准类别,wildcard 查询整体 real 6/23 解决搜索DRE的问题 //不符合标准类别,wildcard 查询整体 real 6/23 解决搜索DRE的问题
selects = null; selects = null;
@@ -1361,7 +1376,8 @@ public class SearchCenterServiceImpl implements SearchCenterService {
selects = null; selects = null;
} }
if (null != value) { if(null != value || null != selects){
if (null != value && selects == null) {
boolSelectValue.should(QueryBuilders.multiMatchQuery(value, boolSelectValue.should(QueryBuilders.multiMatchQuery(value,
"title" "title"
).minimumShouldMatch("100%").field("title",1000f)); ).minimumShouldMatch("100%").field("title",1000f));
@@ -1372,7 +1388,6 @@ public class SearchCenterServiceImpl implements SearchCenterService {
"textItems" "textItems"
).minimumShouldMatch("100%").field("title",1000f)); ).minimumShouldMatch("100%").field("title",1000f));
boolSelectValue.should(QueryBuilders.wildcardQuery("title.keyword","*"+value+"*")); boolSelectValue.should(QueryBuilders.wildcardQuery("title.keyword","*"+value+"*"));
boolQueryShould.must(boolSelectValue);
// multiQueryBuilder = QueryBuilders.multiMatchQuery("*"+value+"*", // multiQueryBuilder = QueryBuilders.multiMatchQuery("*"+value+"*",
// "title.keyword", "textContent", "issue_time").minimumShouldMatch("100%").field("title.keyword", 1000f).field("textContent.keyword", 0.0000000000000000000000000000000001f); // "title.keyword", "textContent", "issue_time").minimumShouldMatch("100%").field("title.keyword", 1000f).field("textContent.keyword", 0.0000000000000000000000000000000001f);
//// boolQueryMust.must(multiQueryBuilder); //// boolQueryMust.must(multiQueryBuilder);
@@ -1380,21 +1395,28 @@ public class SearchCenterServiceImpl implements SearchCenterService {
} }
// searchInfoEO.setSelectValue(searchInfoEO.getSelectValue().replace("-","\\-")); // searchInfoEO.setSelectValue(searchInfoEO.getSelectValue().replace("-","\\-"));
if (null != selects) { if (null != selects) {
boolQueryShould.should(QueryBuilders.wildcardQuery("title.keyword", "*" + real + "*").boost(1000f)); boolSelectValue
for (String se : selects) { .should(QueryBuilders.wildcardQuery("title.keyword", "*" + real + "*").boost(1000f))
if (StringUtils.isNotBlank(se)) {
boolQueryShould
// .should(QueryBuilders.wildcardQuery("title.keyword", "*" + real + "*").boost(10f))
.should(QueryBuilders.wildcardQuery("textContent.keyword", "*" + se + "*").boost(0.0000000000000000000000000000000001f))
.should(QueryBuilders.wildcardQuery("issue_time", "*" + se + "*"));
}
}
}
if (isReal){
boolQueryShould.should(QueryBuilders.wildcardQuery("title.keyword", "*" + real + "*").boost(1000f))
.should(QueryBuilders.wildcardQuery("textContent.keyword", "*" + real + "*").boost(0.0000000000000000000000000000000001f)) .should(QueryBuilders.wildcardQuery("textContent.keyword", "*" + real + "*").boost(0.0000000000000000000000000000000001f))
.should(QueryBuilders.wildcardQuery("issue_time", "*" + real + "*")); .should(QueryBuilders.wildcardQuery("issue_time", "*" + real + "*"));
// for (String se : selects) {
// if (StringUtils.isNotBlank(se)) {
// boolSelectValue
// .should(QueryBuilders.wildcardQuery("title.keyword", "*" + real + "*").boost(10f))
// .should(QueryBuilders.wildcardQuery("textContent.keyword", "*" + se + "*").boost(0.0000000000000000000000000000000001f))
// .should(QueryBuilders.wildcardQuery("issue_time", "*" + se + "*"));
// }
// }
} }
// if (isReal){
// boolSelectValue.should(QueryBuilders.wildcardQuery("title.keyword", "*" + real + "*").boost(1000f))
// .should(QueryBuilders.wildcardQuery("textContent.keyword", "*" + real + "*").boost(0.0000000000000000000000000000000001f))
// .should(QueryBuilders.wildcardQuery("issue_time", "*" + real + "*"));
// boolQueryShould.must(boolSelectValue);
// }
boolQueryShould.must(boolSelectValue);
}
BoolQueryBuilder queryBuilder = new BoolQueryBuilder(); BoolQueryBuilder queryBuilder = new BoolQueryBuilder();
if(StringUtils.isNotBlank(searchInfoEO.getNYLXCLASS()) || StringUtils.isNotBlank(searchInfoEO.getCLLX())){ if(StringUtils.isNotBlank(searchInfoEO.getNYLXCLASS()) || StringUtils.isNotBlank(searchInfoEO.getCLLX())){
if(StringUtils.isNotBlank(searchInfoEO.getNYLXCLASS())){ if(StringUtils.isNotBlank(searchInfoEO.getNYLXCLASS())){
@@ -1467,6 +1489,17 @@ public class SearchCenterServiceImpl implements SearchCenterService {
return result; return result;
} }
private String getValue(String real) {
String value = real.replaceAll("[^(A-Za-z\\/)]", "");
String[] valArr = value.split("\\/");
if (valArr.length > 2) {
value = valArr[0] + "/" + valArr[1];
}else{
value = valArr[0];
}
return value;
}
//更新索引的max_result_window参数 //更新索引的max_result_window参数
private boolean updateIndex(String indices, int from,int size) { private boolean updateIndex(String indices, int from,int size) {
int records = from * size + size; int records = from * size + size;