:::tips 高亮的代码与之前代码差异较大,原因有两点:
- 查询的DSL:其中除了查询条件,还需要添加高亮条件,同样是与query同级
 结果解析:结果除了要解析_source文档数据,还要解析高亮结果 ::: ```java @SpringBootTest public class MyTest{ //注入RestHighLevelClient对象 @Autowired private RestHighLevelClient restHighLevelClient;
@Test public void test() throws IOException {
//准备SearchRequest请求对象,并指定索引库名SearchRequest searchRequest = new SearchRequest(索引库名);//准备MatchQueryBuilder查询对象MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery(字段名, 搜索词);//在SearchRequest对象中放入MatchQueryBuilder查询对象searchRequest.source().query(matchQueryBuilder);//在SearchRequest对象中放入HighlightBuilder对象,并指定高亮字段名,requireFieldMatch(false)表示高亮字段名和查询的字段名不一致searchRequest.source().highlighter(new HighlightBuilder().field(高亮字段名).requireFieldMatch(false));//发送请求,得到响应对象SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);//从响应对象中获取响应结果SearchHits searchHits = searchResponse.getHits();//获取文档的总条数long total = searchHits.getTotalHits().value;//获取搜索结果数组SearchHit[] hits = searchHits.getHits();//创建文档集合,用于存放结果List<文档类名> 集合对象名 = new ArrayList<>();//遍历数组for (SearchHit hit : hits) {//获取Json格式的文档数据String json = hit.getSourceAsString();//反序列化Json,这里需要引入fastjson的依赖文档类名 文档对象名 = JSON.parseObject(json, 文档类名.class);//获取高亮结果Map<String, HighlightField> highlightFields = hit.getHighlightFields();if (!CollectionUtils.isEmpty(highlightFields)) {//指定高亮字段名,获取高亮结果HighlightField highlightField = highlightFields.get(高亮字段名);if (highlightField != null) {//获取高亮文本String highlightText = highlightField.getFragments()[0].string();//覆盖非高亮结果文档对象名.set字段(highlightText);}}//将结果放入集合集合对象名.add(文档对象名);}
}
} ```
