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(); } }
搜索结果: