From 9c9793ad63093c7aabdab8784437aa63a6de66d3 Mon Sep 17 00:00:00 2001 From: super_liu <396572590@qq.com> Date: Wed, 4 May 2022 16:14:10 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20There=20is=20no=20way=20the,=20?= =?UTF-8?q?=E4=BC=98=E5=8C=96ES=20=E4=BC=98=E5=88=B0=E4=BB=80=E4=B9=88?= =?UTF-8?q?=E6=97=B6=E5=80=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SearchCenterServiceImpl.java | 65 ++++++++++++++----- 1 file changed, 49 insertions(+), 16 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 3958ee4f..1fff2406 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 @@ -80,7 +80,7 @@ public class SearchCenterServiceImpl implements SearchCenterService { BoolQueryBuilder boolQueryShould = QueryBuilders.boolQuery(); BoolQueryBuilder boolQueryMust = QueryBuilders.boolQuery(); - updateIndex(searchInfoEO.getSelectIndex(),(searchInfoEO.getPage()-1)*searchInfoEO.getPageSize(),searchInfoEO.getPageSize()); + updateIndex(searchInfoEO.getSelectIndex()); searchRequestBuilder = client.prepareSearch(searchInfoEO.getSelectIndex()) .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) .setFrom((searchInfoEO.getPage()-1)*searchInfoEO.getPageSize()) @@ -207,10 +207,17 @@ public class SearchCenterServiceImpl implements SearchCenterService { BoolQueryBuilder boolQueryShould = QueryBuilders.boolQuery(); BoolQueryBuilder boolQueryMust = QueryBuilders.boolQuery(); - updateIndex(searchInfoEO.getSelectIndex(),(searchInfoEO.getPage()-1)*searchInfoEO.getPageSize(),searchInfoEO.getPageSize()); + updateIndex(searchInfoEO.getSelectIndex()); + String sortField = ""; + if("laws".equals(searchInfoEO.getSelectIndex())){ + sortField = "lawsYear"; + }else { + sortField = "standYear"; + } searchRequestBuilder = client.prepareSearch(searchInfoEO.getSelectIndex()) .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) .setFrom((searchInfoEO.getPage()-1)*searchInfoEO.getPageSize()) + .addSort(sortField, SortOrder.DESC) .addSort("issue_time_data", SortOrder.DESC) .setSize(searchInfoEO.getPageSize()); @@ -322,7 +329,34 @@ public class SearchCenterServiceImpl implements SearchCenterService { //在结果中检索 if (StringUtils.isNotEmpty(searchInfoEO.getSelectValue()) && !isRqFormat(searchInfoEO.getSelectValue())) { QueryBuilder multiQuery = queryInResult(searchInfoEO); - boolQueryBuilder.must(multiQuery); + BoolQueryBuilder boolSelectValue = new BoolQueryBuilder(); + boolSelectValue.should(multiQuery); + switch (searchInfoEO.getSelectIndex()){ + case "stand": + boolSelectValue + .should(QueryBuilders.wildcardQuery("standSort.keyword", "*" + searchInfoEO.getSelectValue().toUpperCase() + "*").boost(1005f)) + .should(QueryBuilders.wildcardQuery("standNumber.keyword", "*" + searchInfoEO.getSelectValue().toUpperCase() + "*").boost(1003f)) + .should(QueryBuilders.wildcardQuery("standYear.keyword", "*" + searchInfoEO.getSelectValue().toUpperCase() + "*").boost(1002f)) + .should(QueryBuilders.wildcardQuery("stand_name.keyword", "*" + searchInfoEO.getSelectValue().toUpperCase() + "*").boost(1000f)); + break; + case "laws": + boolSelectValue + .should(QueryBuilders.wildcardQuery("lawsType.keyword", "*" + searchInfoEO.getSelectValue().toUpperCase() + "*").boost(1005f)) + .should(QueryBuilders.wildcardQuery("lawsNumber.keyword", "*" + searchInfoEO.getSelectValue().toUpperCase() + "*").boost(1003f)) + .should(QueryBuilders.wildcardQuery("lawsYear.keyword", "*" + searchInfoEO.getSelectValue().toUpperCase() + "*").boost(1002f)) + .should(QueryBuilders.wildcardQuery("lawsName.keyword", "*" + searchInfoEO.getSelectValue().toUpperCase() + "*").boost(1001f)); + + break; + case "bussstand": + boolSelectValue + .should(QueryBuilders.wildcardQuery("standSort.keyword", "*" + searchInfoEO.getSelectValue().toUpperCase() + "*").boost(1005f)) + .should(QueryBuilders.wildcardQuery("standNumber.keyword", "*" + searchInfoEO.getSelectValue().toUpperCase() + "*").boost(1003f)) + .should(QueryBuilders.wildcardQuery("standYear.keyword", "*" + searchInfoEO.getSelectValue().toUpperCase() + "*").boost(1002f)) + .should(QueryBuilders.wildcardQuery("stand_name.keyword", "*" + searchInfoEO.getSelectValue().toUpperCase() + "*").boost(1000f)); + break; + default: break; + } + boolQueryBuilder.must(boolSelectValue); } searchRequestBuilder.setQuery(boolQueryBuilder).setTrackTotalHits(true); @@ -764,10 +798,10 @@ public class SearchCenterServiceImpl implements SearchCenterService { BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder(); List fieldList = getStringField(searchInfoEO); List fieldNameList = new ArrayList<>(); - String[] standStr = {"content","standSort","standNumber","standYear","stand_name","standEnName","standNatureName", + String[] standStr = {"content","standEnName","standNatureName", "textStatusName","isRelateAccessName","numbershow","standSystem","NYLXCLASS","CLLX"}; - String[] lawsStr = {"content","lawsType","lawsNumber","lawsName","lawsEnName","lawsNo","issueCompany","lawsTextState","lawsSyqy","lawsSycx","isRelateAccess","lawsYear","lawsNotisyncNum","lawsBulletin","lawsLabel","lawsRemark"}; - String[] bussstandStr = {"content","standSort","stand_code","standYear","stand_name","standEnName","nameshow","standstateshow","numbershow","textStatusBuss","textStatusBussName","NYLXCLASS","CLLX"}; + String[] lawsStr = {"content","lawsEnName","lawsNo","issueCompany","lawsTextState","lawsSyqy","lawsSycx","isRelateAccess","lawsNotisyncNum","lawsBulletin","lawsLabel","lawsRemark"}; + String[] bussstandStr = {"content","stand_code","standEnName","nameshow","standstateshow","numbershow","textStatusBuss","textStatusBussName","NYLXCLASS","CLLX"}; for (String field : fieldList) { // 关键字查询属性字段 String keyWordField2 = field + "Name"; @@ -779,7 +813,7 @@ public class SearchCenterServiceImpl implements SearchCenterService { listStrings.addAll(fieldNameList); String[] fieldArr = listStrings.stream().toArray(String[]::new); multiQueryBuilder = QueryBuilders.multiMatchQuery(searchInfoEO.getSelectValue(),fieldArr - ).minimumShouldMatch("100%"); + ).minimumShouldMatch("100%").boost(1L); // boolQueryBuilder.should(); // for (String field : fieldList) { // // 关键字查询属性字段 @@ -792,14 +826,14 @@ public class SearchCenterServiceImpl implements SearchCenterService { listStringLaws.addAll(fieldNameList); String[] fieldLawsArr = listStringLaws.stream().toArray(String[]::new); multiQueryBuilder = QueryBuilders.multiMatchQuery(searchInfoEO.getSelectValue(),fieldLawsArr - ).minimumShouldMatch("100%"); + ).minimumShouldMatch("100%").boost(1L); break; case "bussstand": List listStringBussstand = Stream.of(bussstandStr).collect(Collectors.toList()); listStringBussstand.addAll(fieldNameList); String[] fieldBussstandArr = listStringBussstand.stream().toArray(String[]::new); multiQueryBuilder = QueryBuilders.multiMatchQuery(searchInfoEO.getSelectValue(),fieldBussstandArr - ).minimumShouldMatch("100%"); + ).minimumShouldMatch("100%").boost(1L); break; default: break; } @@ -1221,7 +1255,7 @@ public class SearchCenterServiceImpl implements SearchCenterService { hiBuilder.field(highlightDate); hiBuilder.preTags(""); hiBuilder.postTags(""); - updateIndex("fulltextserch",(searchInfoEO.getPage()-1)*searchInfoEO.getPageSize(),searchInfoEO.getPageSize()); + updateIndex("fulltextserch"); searchRequestBuilder = client.prepareSearch("fulltextserch") .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) .highlighter(hiBuilder) @@ -1516,7 +1550,7 @@ public class SearchCenterServiceImpl implements SearchCenterService { hiBuilder.preTags(""); hiBuilder.postTags(""); - updateIndex("fulltextserch",(searchInfoEO.getPage()-1)*searchInfoEO.getPageSize(),searchInfoEO.getPageSize()); + updateIndex("fulltextserch"); searchRequestBuilder = client.prepareSearch("fulltextserch") .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) .highlighter(hiBuilder) @@ -1581,14 +1615,13 @@ public class SearchCenterServiceImpl implements SearchCenterService { } //更新索引的max_result_window参数 - private boolean updateIndex(String indices, int from,int size) { - int records = from * size + size; - if (records <= 10000) return true; + private boolean updateIndex(String indices) { AcknowledgedResponse indexResponse = client.admin().indices() .prepareUpdateSettings(indices) .setSettings(Settings.builder() - .put("index.max_result_window", records) - .put("highlight.max_analyzed_offset", records) + .put("index.max_result_window", 100000000) + .put("highlight.max_analyzed_offset", 100000000) + .put("index.highlight.max_analyzed_offset", 100000000) .build() ).get(); return indexResponse.isAcknowledged();