1.環境:elasticsearch-7.3.2 、springBoot 2.2.0.RELEASE
es相關依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency>
檢索測試方法:
@Override public void improveSearch(String text) { // 搜索請求對象 SearchRequest searchRequest = new SearchRequest(BwbdType.ES_INDEX,"testdoct"); // 指定類型 searchRequest.types(BwbdType.ES_TYPE,"testbean"); // 搜索源構建對象 SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); // 搜索方式 // 首先構造多關鍵字查詢條件 BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); // 初始聚合查詢 MultiMatchQueryBuilder matchQueryBuilder = QueryBuilders .multiMatchQuery(text, BwbdType.PROPERTY_NUMBERS , BwbdType.PROPERTY_TITLES, BwbdType.PROPERTY_CONTENTS).analyzer("ik_smart") .field("name", 1f) .field(BwbdType.PROPERTY_NUMBERS, 0.1f) .field(BwbdType.PROPERTY_TITLES, 0.1f) .field(BwbdType.PROPERTY_CONTENTS, 0.001f) .minimumShouldMatch(BwbdType.MATCH_LEVEL_THREE); // 添加條件到布爾查詢 boolQueryBuilder.must(matchQueryBuilder); // 將查詢條件封裝給查詢對象 searchSourceBuilder.query(boolQueryBuilder); searchSourceBuilder.size(20); searchSourceBuilder.from(1); // *********************** // 高亮查詢 HighlightBuilder highlightBuilder = new HighlightBuilder(); highlightBuilder.preTags(CommonConstraint.LIGHT_TAG_START); // 高亮前綴 highlightBuilder.postTags(CommonConstraint.LIGHT_TAG_END); // 高亮后綴 List<HighlightBuilder.Field> fields = highlightBuilder.fields(); fields.add(new HighlightBuilder .Field(BwbdType.PROPERTY_NUMBERS)); // 高亮字段 fields.add(new HighlightBuilder .Field(BwbdType.PROPERTY_TITLES)); // 高亮字段 fields.add(new HighlightBuilder .Field(BwbdType.PROPERTY_CONTENTS).fragmentSize(100000)); // 高亮字段 // 添加高亮查詢條件到搜索源 searchSourceBuilder.highlighter(highlightBuilder); // *********************** // 向搜索請求對象中設置搜索源 searchRequest.source(searchSourceBuilder); // 執行搜索,向ES發起http請求 SearchResponse searchResponse = null; try (RestHighLevelClient client = new RestHighLevelClient(restClientBuilder)) { searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); int i = 1; } catch (IOException e) { e.printStackTrace(); } }
搜索結果: