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

目录

[12.8 RestClient查询文档](#12.8 RestClient查询文档)

[12.8.1 快速入门](#12.8.1 快速入门)

[12.8.2 match, term,bool,range查询](#12.8.2 match, term,bool,range查询)

[12.8.3 排序和分页](#12.8.3 排序和分页)

[12.8.4 高亮](#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 小时前
Next.js 请求最佳实践 - vercel 2026一月发布指南
前端·react.js·next.js
ccnocare1 小时前
浅浅看一下设计模式
前端
Lee川1 小时前
🎬 从标签到屏幕:揭秘现代网页构建与适配之道
前端·面试
松涛和鸣1 小时前
72、IMX6ULL驱动实战:设备树(DTS/DTB)+ GPIO子系统+Platform总线
linux·服务器·arm开发·数据库·单片机
Ticnix2 小时前
ECharts初始化、销毁、resize 适配组件封装(含完整封装代码)
前端·echarts
纯爱掌门人2 小时前
终焉轮回里,藏着 AI 与人类的答案
前端·人工智能·aigc
twl2 小时前
OpenClaw 深度技术解析
前端
崔庆才丨静觅2 小时前
比官方便宜一半以上!Grok API 申请及使用
前端
星光不问赶路人2 小时前
vue3使用jsx语法详解
前端·vue.js
天蓝色的鱼鱼2 小时前
shadcn/ui,给你一个真正可控的UI组件库
前端