山东大学软件学院项目实训-创新实训-基于大模型的旅游平台(三十二)- 微服务(12)

目录

12.8 RestClient查询文档

12.8.1 快速入门

12.8.2 match, term,bool,range查询

12.8.3 排序和分页

12.8.4 高亮


12.8 RestClient查询文档

12.8.1 快速入门
  
      @Test
      void testMatchALL() throws IOException {
          // 1. 准备request
          SearchRequest request = new SearchRequest("hotel");
          // 2. 准备DSL
          request.source()
                  .query(QueryBuilders.matchAllQuery());
          // 3. 发送请求
          SearchResponse response = client.search(request, RequestOptions.DEFAULT);
  ​
          System.out.println(response);
      }

结果解析:

  
      @Test
      void testMatchALL() throws IOException {
          // 1. 准备request
          SearchRequest request = new SearchRequest("hotel");
          // 2. 准备DSL
          request.source()
                  .query(QueryBuilders.matchAllQuery());
          // 3. 发送请求
          SearchResponse response = client.search(request, RequestOptions.DEFAULT);
  ​
          // 4. 结果解析
          SearchHits searchHits = response.getHits();
          // 4.1 获取总条数
          long total = searchHits.getTotalHits().value;
          System.out.println(total);
          // 4.2 获取文档数组
          SearchHit[] hits = searchHits.getHits();
          for (SearchHit hit : hits) {
              // 取文档source
              String json = hit.getSourceAsString();
              // 反序列化
              HotelDoc hotelDoc = JSON.parseObject(json, HotelDoc.class);
              System.out.println(hotelDoc);
          }
      }
12.8.2 match, term,bool,range查询

把结果解析的代码抽取成方法

  
      private void HandleResponse(SearchResponse response){
          // 4. 结果解析
          SearchHits searchHits = response.getHits();
          // 4.1 获取总条数
          long total = searchHits.getTotalHits().value;
          System.out.println(total);
          // 4.2 文档数组
          SearchHit[] hits = searchHits.getHits();
          for (SearchHit hit : hits) {
              // 取文档source
              String json = hit.getSourceAsString();
              // 反序列化
              HotelDoc hotelDoc = JSON.parseObject(json, HotelDoc.class);
              System.out.println(hotelDoc);
          }
      }

match查询

  
      @Test
      void testMatch() throws IOException {
          // 1. 准备request
          SearchRequest request = new SearchRequest("hotel");
          // 2. 准备DSL
          request.source()
                  .query(QueryBuilders.matchQuery("all","如家"));
          // 3. 发送请求
          SearchResponse response = client.search(request, RequestOptions.DEFAULT);
          HandleResponse(response);
  ​
      }

bool查询:

  
      @Test
      void testBool() throws IOException {
          // 1. 准备request
          SearchRequest request = new SearchRequest("hotel");
          // 2. 准备DSL
          // 2.1 准备BooleanQuery
          BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
          // 2.2 添加term
          boolQuery.must(QueryBuilders.termQuery("city","上海"));
          // 2.3 添加range
          boolQuery.filter(QueryBuilders.rangeQuery("price").lte(250));
  ​
          request.source().query(boolQuery);
  ​
          // 3. 发送请求
          SearchResponse response = client.search(request, RequestOptions.DEFAULT);
          HandleResponse(response);
  ​
      }

12.8.3 排序和分页

  
      @Test
      void testPageAndSort() throws IOException {
          // 1. 准备request
          SearchRequest request = new SearchRequest("hotel");
          // 2. 准备DSL
          // 2.1 query
          request.source().query(QueryBuilders.matchAllQuery());
          // 2.2 排序sort
          request.source().sort("price", SortOrder.ASC);
          // 2.3 分页  from size
          request.source().from(56).size(10);    // 第56条开始展示10条
          // 3. 发送请求
          SearchResponse response = client.search(request, RequestOptions.DEFAULT);
          HandleResponse(response);
      }
12.8.4 高亮
  
      @Test
      void testHighLight() throws IOException {
          // 1. 准备request
          SearchRequest request = new SearchRequest("hotel");
          // 2. 准备DSL
          // 2.1 query
          request.source().query(QueryBuilders.matchQuery("all","如家"));
          // 2.2 高亮
          request.source().highlighter(new HighlightBuilder().field("name").requireFieldMatch(false));
  ​
          // 3. 发送请求
          SearchResponse response = client.search(request, RequestOptions.DEFAULT);
          HandleHighLightResponse(response);
      }

高亮结果解析 :

  
      private void HandleHighLightResponse(SearchResponse response){
          // 4. 结果解析
          SearchHits searchHits = response.getHits();
          // 4.1 获取总条数
          long total = searchHits.getTotalHits().value;
          System.out.println(total);
          // 4.2 文档数组
          SearchHit[] hits = searchHits.getHits();
          for (SearchHit hit : hits) {
              // 取文档source
              String json = hit.getSourceAsString();
              // 反序列化
              HotelDoc hotelDoc = JSON.parseObject(json, HotelDoc.class);
              // 获取高亮结果
              Map<String, HighlightField> highlightFields = hit.getHighlightFields();
              if(!CollectionUtils.isEmpty(highlightFields)){
                  // 根据名字获取高亮结果
                  HighlightField highlightField = highlightFields.get("name");
                  if(highlightField != null){
                      // 获取高亮值
                      String name = highlightField.getFragments()[0].string();
                      // 覆盖非高亮结果
                      hotelDoc.setName(name);
                  }
              }
  ​
              System.out.println(hotelDoc);
          }
      }

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-06-13 06:00:03       10 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-13 06:00:03       12 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-13 06:00:03       11 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-13 06:00:03       13 阅读

热门阅读

  1. payable介绍, 编写一个转账的测试合约

    2024-06-13 06:00:03       5 阅读
  2. git 常用命令

    2024-06-13 06:00:03       4 阅读
  3. 理解 Vue 中的响应式系统

    2024-06-13 06:00:03       4 阅读
  4. Springer投稿流程——Cybersecurity

    2024-06-13 06:00:03       7 阅读
  5. debian10 arm芯片安装.net6

    2024-06-13 06:00:03       5 阅读
  6. R语言桑基图

    2024-06-13 06:00:03       6 阅读
  7. 开发TEE的踩坑之配置SGX环境

    2024-06-13 06:00:03       4 阅读