Merge branch 'develop_migration' into 'develop_master'
feat: There is no way the, 优化ES 权重 全文搜索 及联动查询 添加动态设置 highlight.max_analyzed_offset 最大值 See merge request LiuChao/foton-slrs-system-rest!454
This commit is contained in:
+52
-6
@@ -14,8 +14,10 @@ import org.apache.poi.ss.formula.functions.T;
|
|||||||
import org.elasticsearch.action.search.SearchRequestBuilder;
|
import org.elasticsearch.action.search.SearchRequestBuilder;
|
||||||
import org.elasticsearch.action.search.SearchResponse;
|
import org.elasticsearch.action.search.SearchResponse;
|
||||||
import org.elasticsearch.action.search.SearchType;
|
import org.elasticsearch.action.search.SearchType;
|
||||||
|
import org.elasticsearch.action.support.master.AcknowledgedResponse;
|
||||||
import org.elasticsearch.client.transport.TransportClient;
|
import org.elasticsearch.client.transport.TransportClient;
|
||||||
import org.elasticsearch.common.collect.HppcMaps;
|
import org.elasticsearch.common.collect.HppcMaps;
|
||||||
|
import org.elasticsearch.common.settings.Settings;
|
||||||
import org.elasticsearch.common.text.Text;
|
import org.elasticsearch.common.text.Text;
|
||||||
import org.elasticsearch.index.query.BoolQueryBuilder;
|
import org.elasticsearch.index.query.BoolQueryBuilder;
|
||||||
import org.elasticsearch.index.query.QueryBuilder;
|
import org.elasticsearch.index.query.QueryBuilder;
|
||||||
@@ -1214,6 +1216,7 @@ public class SearchCenterServiceImpl implements SearchCenterService {
|
|||||||
hiBuilder.field(highlightDate);
|
hiBuilder.field(highlightDate);
|
||||||
hiBuilder.preTags("<span class='highlight-class'>");
|
hiBuilder.preTags("<span class='highlight-class'>");
|
||||||
hiBuilder.postTags("</span>");
|
hiBuilder.postTags("</span>");
|
||||||
|
updateIndex("fulltextserch",99999999,2);
|
||||||
searchRequestBuilder = client.prepareSearch("fulltextserch")
|
searchRequestBuilder = client.prepareSearch("fulltextserch")
|
||||||
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
|
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
|
||||||
.highlighter(hiBuilder)
|
.highlighter(hiBuilder)
|
||||||
@@ -1306,6 +1309,7 @@ public class SearchCenterServiceImpl implements SearchCenterService {
|
|||||||
// 记录搜索记录到数据库中
|
// 记录搜索记录到数据库中
|
||||||
BoolQueryBuilder boolQueryShould = QueryBuilders.boolQuery();
|
BoolQueryBuilder boolQueryShould = QueryBuilders.boolQuery();
|
||||||
BoolQueryBuilder boolQueryMust = QueryBuilders.boolQuery();
|
BoolQueryBuilder boolQueryMust = QueryBuilders.boolQuery();
|
||||||
|
BoolQueryBuilder boolSelectValue = new BoolQueryBuilder();
|
||||||
QueryBuilder multiQueryBuilder;
|
QueryBuilder multiQueryBuilder;
|
||||||
String[] selects = null;
|
String[] selects = null;
|
||||||
if (StringUtils.isNotBlank(select)) {
|
if (StringUtils.isNotBlank(select)) {
|
||||||
@@ -1358,10 +1362,21 @@ public class SearchCenterServiceImpl implements SearchCenterService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (null != value) {
|
if (null != value) {
|
||||||
multiQueryBuilder = QueryBuilders.multiMatchQuery(value,
|
boolSelectValue.should(QueryBuilders.multiMatchQuery(value,
|
||||||
"title.keyword", "textContent", "issue_time").minimumShouldMatch("100%").field("title.keyword", 1000f).field("textContent.keyword", 0.0000000000000000000000000000000001f);
|
"title"
|
||||||
// boolQueryMust.must(multiQueryBuilder);
|
).minimumShouldMatch("100%").field("title",1000f));
|
||||||
boolQueryShould.should(multiQueryBuilder);
|
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);
|
||||||
|
// 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("-","\\-"));
|
// searchInfoEO.setSelectValue(searchInfoEO.getSelectValue().replace("-","\\-"));
|
||||||
if (null != selects) {
|
if (null != selects) {
|
||||||
@@ -1380,7 +1395,22 @@ public class SearchCenterServiceImpl implements SearchCenterService {
|
|||||||
.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 + "*"));
|
||||||
}
|
}
|
||||||
boolQueryBuilder.should(boolQueryShould);
|
BoolQueryBuilder queryBuilder = new BoolQueryBuilder();
|
||||||
|
if(StringUtils.isNotBlank(searchInfoEO.getNYLXCLASS()) || StringUtils.isNotBlank(searchInfoEO.getCLLX())){
|
||||||
|
if(StringUtils.isNotBlank(searchInfoEO.getNYLXCLASS())){
|
||||||
|
queryBuilder.should(QueryBuilders.multiMatchQuery(searchInfoEO.getNYLXCLASS(),
|
||||||
|
"textContent"
|
||||||
|
).minimumShouldMatch("100%").field("title",10f));
|
||||||
|
}
|
||||||
|
|
||||||
|
if(StringUtils.isNotBlank(searchInfoEO.getCLLX())){
|
||||||
|
queryBuilder.should(QueryBuilders.multiMatchQuery(searchInfoEO.getCLLX(),
|
||||||
|
"textContent"
|
||||||
|
).minimumShouldMatch("100%").field("title",10f));
|
||||||
|
}
|
||||||
|
|
||||||
|
boolQueryShould.must(queryBuilder);
|
||||||
|
}
|
||||||
//在结果中检索
|
//在结果中检索
|
||||||
// boolQueryBuilder.must(multiQueryBuilder);
|
// boolQueryBuilder.must(multiQueryBuilder);
|
||||||
HighlightBuilder hiBuilder=new HighlightBuilder();
|
HighlightBuilder hiBuilder=new HighlightBuilder();
|
||||||
@@ -1392,13 +1422,16 @@ public class SearchCenterServiceImpl implements SearchCenterService {
|
|||||||
hiBuilder.field(highlightDate);
|
hiBuilder.field(highlightDate);
|
||||||
hiBuilder.preTags("<span class='highlight-class'>");
|
hiBuilder.preTags("<span class='highlight-class'>");
|
||||||
hiBuilder.postTags("</span>");
|
hiBuilder.postTags("</span>");
|
||||||
|
|
||||||
|
updateIndex("fulltextserch",99999999,2);
|
||||||
searchRequestBuilder = client.prepareSearch("fulltextserch")
|
searchRequestBuilder = client.prepareSearch("fulltextserch")
|
||||||
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
|
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
|
||||||
.highlighter(hiBuilder)
|
.highlighter(hiBuilder)
|
||||||
.setFrom((searchInfoEO.getPage()-1)*searchInfoEO.getPageSize())
|
.setFrom((searchInfoEO.getPage()-1)*searchInfoEO.getPageSize())
|
||||||
.setSize(searchInfoEO.getPageSize());
|
.setSize(searchInfoEO.getPageSize());
|
||||||
|
|
||||||
searchRequestBuilder.setQuery(boolQueryBuilder);
|
searchRequestBuilder.setQuery(boolQueryShould).setTrackTotalHits(true);
|
||||||
|
|
||||||
// 获取查询到的结果
|
// 获取查询到的结果
|
||||||
SearchResponse response = searchRequestBuilder.get();
|
SearchResponse response = searchRequestBuilder.get();
|
||||||
for (SearchHit searchHit : response.getHits().getHits()) {
|
for (SearchHit searchHit : response.getHits().getHits()) {
|
||||||
@@ -1434,6 +1467,19 @@ public class SearchCenterServiceImpl implements SearchCenterService {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//更新索引的max_result_window参数
|
||||||
|
private boolean updateIndex(String indices, int from,int size) {
|
||||||
|
int records = from * size + size;
|
||||||
|
if (records <= 10000) return true;
|
||||||
|
AcknowledgedResponse indexResponse = client.admin().indices()
|
||||||
|
.prepareUpdateSettings(indices)
|
||||||
|
.setSettings(Settings.builder()
|
||||||
|
.put("highlight.max_analyzed_offset", records)
|
||||||
|
.build()
|
||||||
|
).get();
|
||||||
|
return indexResponse.isAcknowledged();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void searchByKey(CommonSearchInfoEO commonSearchInfoEO) {
|
public void searchByKey(CommonSearchInfoEO commonSearchInfoEO) {
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user