From 6c3d37dc7efdc7041c527ca35adb19337a8d2157 Mon Sep 17 00:00:00 2001 From: super_liu <396572590@qq.com> Date: Fri, 22 Apr 2022 16:23:33 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20There=20is=20no=20way=20the,=20?= =?UTF-8?q?=E4=BC=98=E5=8C=96ES=20=E6=9D=83=E9=87=8D=20=E5=85=A8=E6=96=87?= =?UTF-8?q?=E6=90=9C=E7=B4=A2=20=E5=8F=8A=E8=81=94=E5=8A=A8=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=20=E6=B7=BB=E5=8A=A0=E5=8A=A8=E6=80=81=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=20highlight.max=5Fanalyzed=5Foffset=20=E6=9C=80?= =?UTF-8?q?=E5=A4=A7=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SearchCenterServiceImpl.java | 58 +++++++++++++++++-- 1 file changed, 52 insertions(+), 6 deletions(-) diff --git a/adc-da-search/src/main/java/com/adc/da/search/service/impl/SearchCenterServiceImpl.java b/adc-da-search/src/main/java/com/adc/da/search/service/impl/SearchCenterServiceImpl.java index 56a7e230..efd29d25 100644 --- a/adc-da-search/src/main/java/com/adc/da/search/service/impl/SearchCenterServiceImpl.java +++ b/adc-da-search/src/main/java/com/adc/da/search/service/impl/SearchCenterServiceImpl.java @@ -14,8 +14,10 @@ import org.apache.poi.ss.formula.functions.T; import org.elasticsearch.action.search.SearchRequestBuilder; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.action.search.SearchType; +import org.elasticsearch.action.support.master.AcknowledgedResponse; import org.elasticsearch.client.transport.TransportClient; import org.elasticsearch.common.collect.HppcMaps; +import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.text.Text; import org.elasticsearch.index.query.BoolQueryBuilder; import org.elasticsearch.index.query.QueryBuilder; @@ -1214,6 +1216,7 @@ public class SearchCenterServiceImpl implements SearchCenterService { hiBuilder.field(highlightDate); hiBuilder.preTags(""); hiBuilder.postTags(""); + updateIndex("fulltextserch",99999999,2); searchRequestBuilder = client.prepareSearch("fulltextserch") .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) .highlighter(hiBuilder) @@ -1306,6 +1309,7 @@ public class SearchCenterServiceImpl implements SearchCenterService { // 记录搜索记录到数据库中 BoolQueryBuilder boolQueryShould = QueryBuilders.boolQuery(); BoolQueryBuilder boolQueryMust = QueryBuilders.boolQuery(); + BoolQueryBuilder boolSelectValue = new BoolQueryBuilder(); QueryBuilder multiQueryBuilder; String[] selects = null; if (StringUtils.isNotBlank(select)) { @@ -1358,10 +1362,21 @@ public class SearchCenterServiceImpl implements SearchCenterService { } if (null != 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); + 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); +// 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) { @@ -1380,7 +1395,22 @@ public class SearchCenterServiceImpl implements SearchCenterService { .should(QueryBuilders.wildcardQuery("textContent.keyword", "*" + real + "*").boost(0.0000000000000000000000000000000001f)) .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); HighlightBuilder hiBuilder=new HighlightBuilder(); @@ -1392,13 +1422,16 @@ public class SearchCenterServiceImpl implements SearchCenterService { hiBuilder.field(highlightDate); hiBuilder.preTags(""); hiBuilder.postTags(""); + + updateIndex("fulltextserch",99999999,2); searchRequestBuilder = client.prepareSearch("fulltextserch") .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) .highlighter(hiBuilder) .setFrom((searchInfoEO.getPage()-1)*searchInfoEO.getPageSize()) .setSize(searchInfoEO.getPageSize()); - searchRequestBuilder.setQuery(boolQueryBuilder); + searchRequestBuilder.setQuery(boolQueryShould).setTrackTotalHits(true); + // 获取查询到的结果 SearchResponse response = searchRequestBuilder.get(); for (SearchHit searchHit : response.getHits().getHits()) { @@ -1434,6 +1467,19 @@ public class SearchCenterServiceImpl implements SearchCenterService { 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 public void searchByKey(CommonSearchInfoEO commonSearchInfoEO) {