:::tips 高亮的代码与之前代码差异较大,原因有两点:

    • 查询的DSL:其中除了查询条件,还需要添加高亮条件,同样是与query同级
    • 结果解析:结果除了要解析_source文档数据,还要解析高亮结果 ::: ```java @SpringBootTest public class MyTest{ //注入RestHighLevelClient对象 @Autowired private RestHighLevelClient restHighLevelClient;

      @Test public void test() throws IOException {

      1. //准备SearchRequest请求对象,并指定索引库名
      2. SearchRequest searchRequest = new SearchRequest(索引库名);
      3. //准备MatchQueryBuilder查询对象
      4. MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery(字段名, 搜索词);
      5. //在SearchRequest对象中放入MatchQueryBuilder查询对象
      6. searchRequest.source().query(matchQueryBuilder);
      7. //在SearchRequest对象中放入HighlightBuilder对象,并指定高亮字段名,requireFieldMatch(false)表示高亮字段名和查询的字段名不一致
      8. searchRequest.source().highlighter(new HighlightBuilder().field(高亮字段名).requireFieldMatch(false));
      9. //发送请求,得到响应对象
      10. SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
      11. //从响应对象中获取响应结果
      12. SearchHits searchHits = searchResponse.getHits();
      13. //获取文档的总条数
      14. long total = searchHits.getTotalHits().value;
      15. //获取搜索结果数组
      16. SearchHit[] hits = searchHits.getHits();
      17. //创建文档集合,用于存放结果
      18. List<文档类名> 集合对象名 = new ArrayList<>();
      19. //遍历数组
      20. for (SearchHit hit : hits) {
      21. //获取Json格式的文档数据
      22. String json = hit.getSourceAsString();
      23. //反序列化Json,这里需要引入fastjson的依赖
      24. 文档类名 文档对象名 = JSON.parseObject(json, 文档类名.class);
      25. //获取高亮结果
      26. Map<String, HighlightField> highlightFields = hit.getHighlightFields();
      27. if (!CollectionUtils.isEmpty(highlightFields)) {
      28. //指定高亮字段名,获取高亮结果
      29. HighlightField highlightField = highlightFields.get(高亮字段名);
      30. if (highlightField != null) {
      31. //获取高亮文本
      32. String highlightText = highlightField.getFragments()[0].string();
      33. //覆盖非高亮结果
      34. 文档对象名.set字段(highlightText);
      35. }
      36. }
      37. //将结果放入集合
      38. 集合对象名.add(文档对象名);
      39. }

      }

    } ```