山东大学软件学院项目实训-创新实训-基于大模型的旅游平台(三十二)- 微服务(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);
          }
      }
相关推荐
RisunJan21 小时前
Linux命令-lilo(安装核心载入开机管理程序)
linux·运维·服务器
舰长11521 小时前
ubuntu16 在防火墙禁止“允许Traceroute探测”
linux·运维·服务器
蓝田~21 小时前
Nginx集群与相关服务配置说明
运维·nginx
郑州光合科技余经理1 天前
同城配送调度系统实战:JAVA微服务
java·开发语言·前端·后端·微服务·中间件·php
TDengine (老段)1 天前
TDengine 脱敏函数用户手册
大数据·服务器·数据库·物联网·时序数据库·iot·tdengine
一只小bit1 天前
Qt 绘图核心教程:从基础绘制到图像操作全解析
前端·c++·qt·gui
乾元1 天前
绕过艺术:使用 GANs 对抗 Web 防火墙(WAF)
前端·网络·人工智能·深度学习·安全·架构
HWL56791 天前
一个CSS属性will-change: transform
前端·css
Y淑滢潇潇1 天前
WEB 作业 即时内容发布前端交互案例
前端·javascript·交互
qq_405268661 天前
Kali使用nginx部署前后端项目
运维·nginx