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) {