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

This commit is contained in:
super_liu
2022-04-28 13:22:57 +08:00
parent 464b11f47d
commit 375401e83a
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(elasticsearchService.isIndexExist(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 (pattern.matcher(searchInfoEO.getSelectValue()).matches()) {
result = searchCenterService.searchSarBykeyAndHighLightNumber(searchInfoEO);
@@ -1299,8 +1299,41 @@ public class SearchCenterServiceImpl implements SearchCenterService {
select = searchInfoEO.getSelectValue().substring(num + 1).trim();
real = value + " " + select;
}else{
value = real;
select = "";
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 {
value = real;
select = "";
}
}
searchInfoEO.setSelectValue(select);
List<Map<String, Object>> result = new ArrayList<>();
@@ -1316,31 +1349,13 @@ public class SearchCenterServiceImpl implements SearchCenterService {
//判断标准号是否企标SMTC ,标准列别 (),/,字母
Pattern pattern = Pattern.compile("^[a-zA-Z\\/\\(\\)\\\\]+$");
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;
}
Pattern patternbianhao = Pattern.compile("^[0-9a-zA-Z\\.\\(\\\\\\)\\-\\s]+$");
if (patternbianhao.matcher(select).matches()) {
//符合标准编号
selects = select.replace(" ","-").split("-");
} else {
//不符合标准SMTC
Pattern patternbianhao = Pattern.compile("^[0-9a-zA-Z\\.\\(\\\\\\)\\-\\s]+$");
if (patternbianhao.matcher(select).matches()) {
//符合标准编号
selects = select.replace(" ","-").split("-");
} else {
//不符合标准编号 使用wildcard查询 编号
selects = select.replace(" ","-").split("-");
}
//不符合标准编号 使用wildcard查询 编号
selects = select.replace(" ","-").split("-");
}
} else {
//不符合标准类别,wildcard 查询整体 real 6/23 解决搜索DRE的问题
@@ -1361,40 +1376,47 @@ public class SearchCenterServiceImpl implements SearchCenterService {
selects = null;
}
if (null != value) {
boolSelectValue.should(QueryBuilders.multiMatchQuery(value,
"title"
).minimumShouldMatch("100%").field("title",1000f));
boolSelectValue.should(QueryBuilders.multiMatchQuery(value,
"textContent"
).minimumShouldMatch("100%").field("title",1000f));
boolSelectValue.should(QueryBuilders.multiMatchQuery(value,
"textItems"
).minimumShouldMatch("100%").field("title",1000f));
boolSelectValue.should(QueryBuilders.wildcardQuery("title.keyword","*"+value+"*"));
boolQueryShould.must(boolSelectValue);
if(null != value || null != selects){
if (null != value && selects == null) {
boolSelectValue.should(QueryBuilders.multiMatchQuery(value,
"title"
).minimumShouldMatch("100%").field("title",1000f));
boolSelectValue.should(QueryBuilders.multiMatchQuery(value,
"textContent"
).minimumShouldMatch("100%").field("title",1000f));
boolSelectValue.should(QueryBuilders.multiMatchQuery(value,
"textItems"
).minimumShouldMatch("100%").field("title",1000f));
boolSelectValue.should(QueryBuilders.wildcardQuery("title.keyword","*"+value+"*"));
// multiQueryBuilder = QueryBuilders.multiMatchQuery("*"+value+"*",
// "title.keyword", "textContent", "issue_time").minimumShouldMatch("100%").field("title.keyword", 1000f).field("textContent.keyword", 0.0000000000000000000000000000000001f);
//// boolQueryMust.must(multiQueryBuilder);
// boolQueryShould.should(multiQueryBuilder);
}
// searchInfoEO.setSelectValue(searchInfoEO.getSelectValue().replace("-","\\-"));
if (null != selects) {
boolQueryShould.should(QueryBuilders.wildcardQuery("title.keyword", "*" + real + "*").boost(1000f));
for (String se : selects) {
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 + "*"));
}
}
// searchInfoEO.setSelectValue(searchInfoEO.getSelectValue().replace("-","\\-"));
if (null != selects) {
boolSelectValue
.should(QueryBuilders.wildcardQuery("title.keyword", "*" + real + "*").boost(1000f))
.should(QueryBuilders.wildcardQuery("textContent.keyword", "*" + real + "*").boost(0.0000000000000000000000000000000001f))
.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);
}
if (isReal){
boolQueryShould.should(QueryBuilders.wildcardQuery("title.keyword", "*" + real + "*").boost(1000f))
.should(QueryBuilders.wildcardQuery("textContent.keyword", "*" + real + "*").boost(0.0000000000000000000000000000000001f))
.should(QueryBuilders.wildcardQuery("issue_time", "*" + real + "*"));
}
BoolQueryBuilder queryBuilder = new BoolQueryBuilder();
if(StringUtils.isNotBlank(searchInfoEO.getNYLXCLASS()) || StringUtils.isNotBlank(searchInfoEO.getCLLX())){
if(StringUtils.isNotBlank(searchInfoEO.getNYLXCLASS())){
@@ -1467,6 +1489,17 @@ public class SearchCenterServiceImpl implements SearchCenterService {
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参数
private boolean updateIndex(String indices, int from,int size) {
int records = from * size + size;