feat: There is no way the, 优化ES 权重 全文搜索
This commit is contained in:
+1
-1
@@ -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);
|
||||||
|
|||||||
+87
-54
@@ -1299,8 +1299,41 @@ public class SearchCenterServiceImpl implements SearchCenterService {
|
|||||||
select = searchInfoEO.getSelectValue().substring(num + 1).trim();
|
select = searchInfoEO.getSelectValue().substring(num + 1).trim();
|
||||||
real = value + " " + select;
|
real = value + " " + select;
|
||||||
}else{
|
}else{
|
||||||
value = real;
|
String reg = ".*[0-9].*";
|
||||||
select = "";
|
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);
|
searchInfoEO.setSelectValue(select);
|
||||||
List<Map<String, Object>> result = new ArrayList<>();
|
List<Map<String, Object>> result = new ArrayList<>();
|
||||||
@@ -1316,31 +1349,13 @@ 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()) {
|
||||||
//符合标准类别
|
Pattern patternbianhao = Pattern.compile("^[0-9a-zA-Z\\.\\(\\(\\)\\)\\-\\s]+$");
|
||||||
if ("SMTC".equals(value)) {
|
if (patternbianhao.matcher(select).matches()) {
|
||||||
//符合标准SMTC
|
//符合标准编号
|
||||||
//判断是否带有年份
|
selects = select.replace(" ","-").split("-");
|
||||||
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 {
|
} else {
|
||||||
//不符合标准SMTC
|
//不符合标准编号 使用wildcard查询 编号
|
||||||
Pattern patternbianhao = Pattern.compile("^[0-9a-zA-Z\\.\\(\\(\\)\\)\\-\\s]+$");
|
selects = select.replace(" ","-").split("-");
|
||||||
if (patternbianhao.matcher(select).matches()) {
|
|
||||||
//符合标准编号
|
|
||||||
selects = select.replace(" ","-").split("-");
|
|
||||||
} else {
|
|
||||||
//不符合标准编号 使用wildcard查询 编号
|
|
||||||
selects = select.replace(" ","-").split("-");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
//不符合标准类别,wildcard 查询整体 real 6/23 解决搜索DRE的问题
|
//不符合标准类别,wildcard 查询整体 real 6/23 解决搜索DRE的问题
|
||||||
@@ -1361,40 +1376,47 @@ public class SearchCenterServiceImpl implements SearchCenterService {
|
|||||||
selects = null;
|
selects = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (null != value) {
|
if(null != value || null != selects){
|
||||||
boolSelectValue.should(QueryBuilders.multiMatchQuery(value,
|
if (null != value && selects == null) {
|
||||||
"title"
|
boolSelectValue.should(QueryBuilders.multiMatchQuery(value,
|
||||||
).minimumShouldMatch("100%").field("title",1000f));
|
"title"
|
||||||
boolSelectValue.should(QueryBuilders.multiMatchQuery(value,
|
).minimumShouldMatch("100%").field("title",1000f));
|
||||||
"textContent"
|
boolSelectValue.should(QueryBuilders.multiMatchQuery(value,
|
||||||
).minimumShouldMatch("100%").field("title",1000f));
|
"textContent"
|
||||||
boolSelectValue.should(QueryBuilders.multiMatchQuery(value,
|
).minimumShouldMatch("100%").field("title",1000f));
|
||||||
"textItems"
|
boolSelectValue.should(QueryBuilders.multiMatchQuery(value,
|
||||||
).minimumShouldMatch("100%").field("title",1000f));
|
"textItems"
|
||||||
boolSelectValue.should(QueryBuilders.wildcardQuery("title.keyword","*"+value+"*"));
|
).minimumShouldMatch("100%").field("title",1000f));
|
||||||
boolQueryShould.must(boolSelectValue);
|
boolSelectValue.should(QueryBuilders.wildcardQuery("title.keyword","*"+value+"*"));
|
||||||
// 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);
|
||||||
// boolQueryShould.should(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();
|
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;
|
||||||
|
|||||||
Reference in New Issue
Block a user