当前位置:   article > 正文

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

request.source().from

目录

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);
          }
      }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/810994
推荐阅读
相关标签
  

闽ICP备14008679号