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

目录

[12.5 RestClient操作索引库](#12.5 RestClient操作索引库)

12.5.1创建库

[12.5.2 删除索引库](#12.5.2 删除索引库)

[12.5.3 判断是否存在](#12.5.3 判断是否存在)

[12.6 RestClient操作文档](#12.6 RestClient操作文档)

[12.6.1 新增文档](#12.6.1 新增文档)

[12.6.2 查询文档](#12.6.2 查询文档)

[12.6.3 修改文档](#12.6.3 修改文档)

[12.6.4 删除文档](#12.6.4 删除文档)

[12.6.5 批量导入文档](#12.6.5 批量导入文档)


12.5 RestClient操作索引库

酒店mapping映射

复制代码
  
  ​
  PUT /hotel
  {
    "mappings": {
      "properties": {
        
        "id": {
          "type": "keyword",
          "copy_to": "all"
        },
        
        "name": {
          "type": "text",
          "analyzer": "ik_max_word"
        },
        
        "address": {
          "type": "keyword",
          "index": false
        },
        
        "price": {
          "type": "integer"
        },
        
        "score": {
          "type": "integer"
        },
        
        "brand": {
          "type": "keyword",
          "copy_to": "all"
        },
        
        "city": {
          "type": "keyword"
        },
        
        "starName": {
          "type": "keyword"
        },
        
        "business": {
          "type": "keyword"
        },
        
        "location": {
          "type": "geo_point"
        },
        
        "pic": {
          "type": "keyword",
          "index": false
        },
        
        "all": {
          "type": "text",
          "analyzer": "ik_max_word"
        }
        
      }
    }
  }

导入依赖

复制代码
  
          <!--elasticSearch依赖-->
          <dependency>
              <groupId>org.elasticsearch.client</groupId>
              <artifactId>elasticsearch-rest-high-level-client</artifactId>
              <version>7.12.1</version>
          </dependency>
复制代码
  
      <properties>
          <java.version>1.8</java.version>
          <elasticsearch.version>7.12.1</elasticsearch.version>
      </properties>

创建对象

复制代码
  
  @SpringBootTest
  class HotelIndexTest {
      private RestHighLevelClient client;
  ​
      // 客户端初始化
      @BeforeEach
      void setUp(){
          this.client = new RestHighLevelClient(RestClient.builder(
                  HttpHost.create("http://192.168.142.129:9200")
          ));
      }
  ​
      @Test
      void tetsInit(){
          System.out.println(client);
      }
  ​
      // 客户端销毁
      @AfterEach
      void tearDown() throws IOException {
          this.client.close();
      }
      
  }

client.indices()包含了操作索引库的所有方法

12.5.1创建库
复制代码
  
      @Test
      void testCreateHotelIndex() throws IOException {
          // 1. 创建Request对象
          CreateIndexRequest request = new CreateIndexRequest("hotel");
          // 2. 准备请求的参数
          request.source(MAPPING_TEMPLATE,XContentType.JSON);
          // 3. 发送请求    client.indices()的返回值包含了索引库额所有操作
          client.indices().create(request,RequestOptions.DEFAULT);
      }

MAPPING_TEMPLATE是自定义的常量,也就是上面创建索引库的语句

12.5.2 删除索引库
复制代码
  
      @Test
      void testDeleteIndex() throws IOException {
          // 1. 创建request对象
          DeleteIndexRequest request = new DeleteIndexRequest("hotel");
          // 2. 发送请求
          client.indices().delete(request,RequestOptions.DEFAULT);
      }
12.5.3 判断是否存在
复制代码
  
      @Test
      void testExistIndex() throws IOException {
          // 1. 创建request对象
          GetIndexRequest request = new GetIndexRequest("hotel");
          // 2. 发送请求
          boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
          // 3. 输出
          System.out.println(exists ? "索引库存在" : "索引库不存在");
      }

12.6 RestClient操作文档

12.6.1 新增文档
复制代码
  
      @Test
      void testIndexDocument() throws IOException {
          // 在数据库查到数据
          Hotel hotel = iHotelService.getById(61083L);
          HotelDoc hotelDoc = new HotelDoc(hotel); // 经度 + 纬度 拼接之后的对象 ,即索引库需要的类型
          // 1. 创建请求对象
          IndexRequest request = new IndexRequest("hotel").id(hotel.getId().toString());
          // 2. 准备json文档 把查到的对象转换成json对象
          request.source(JSON.toJSONString(hotelDoc),XContentType.JSON);
          // 3. 发送请求
          client.index(request,RequestOptions.DEFAULT);
      }
12.6.2 查询文档
复制代码
  
      @Test
      void testGetDocumentById() throws IOException {
          // 1. 准备request
          GetRequest request = new GetRequest("hotel", "61083");
          // 2. 发送请求
          GetResponse response = client.get(request, RequestOptions.DEFAULT);
          // 3. 从响应中解析对象
          String json = response.getSourceAsString();
          // 4. 把json转成HotelDoc对象
          HotelDoc hotelDoc = JSON.parseObject(json, HotelDoc.class);
          System.out.println(hotelDoc);
      }
12.6.3 修改文档

第二种更新方式,即局部更新的代码 :

复制代码
  
      @Test
      void testUpdateDocumentById() throws IOException {
          // 1. 准备Request
          UpdateRequest request = new UpdateRequest("hotel", "61083");
          // 2. 准备请求参数
          request.doc(
                  "age", 18,
                  "name","Rose"
          );
          // 3. 发送请求
          client.update(request,RequestOptions.DEFAULT);
      }
12.6.4 删除文档
复制代码
  
      @Test
      void testDeleteDocumentById() throws IOException {
          // 1. 准备request
          DeleteRequest request = new DeleteRequest("hotel","61083");
          // 2. 发送请求
          client.delete(request,RequestOptions.DEFAULT);
      }
12.6.5 批量导入文档
复制代码
  
      @Test
      void testBulk() throws IOException {
          // 批量查询酒店数据
          List<Hotel> hotels = iHotelService.list();
          // 1. 创建Bulk请求
          BulkRequest request = new BulkRequest();
          // 2. 准备参数  添加多个新增的request
          for (Hotel hotel : hotels) {
              // 把hotel转成hotelDoc对象
              HotelDoc hotelDoc = new HotelDoc(hotel);
              request.add(
                      new IndexRequest("hotel").id(hotelDoc.getId().toString())
                              .source(JSON.toJSONString(hotelDoc),XContentType.JSON)
              );
          }
  ​
          // 3. 发送请求
          client.bulk(request,RequestOptions.DEFAULT);
      }
相关推荐
TheBestRucy14 小时前
基于Dify的旅游攻略&王者荣耀攻略智能助手项目
服务器·开发语言·人工智能·python·算法·旅游
zhangjw3414 小时前
第41篇:微服务入门:架构理念+核心组件,理解微服务本质
微服务·云原生·架构
星期一研究室16 小时前
从一条分割线开始,在文档中打造你的内容节奏
微服务·产品·设计
智码看视界18 小时前
Day49-AI微服务化-将大模型能力封装为标准微服务
java·微服务·ai·架构·大模型·sse流式输出·ai中台
中才实用19 小时前
Jenkins自动化部署
运维·自动化·jenkins
youngerwang2 天前
【软件系统架构案例分析每日深耕 Day 17】CBAM成本效益分析:微服务改造决策
微服务·系统架构·cbam·案例每日深耕·微服务改造
星期一研究室2 天前
告别文档「图片灾难排版」!3大黄金法则,让你的文档从杂乱无章到杂志风🧩
微服务·产品·设计
AI产品测评官2 天前
突破系统割裂困局:2026企业级AI招聘架构如何迈向“原生全流程”?
大数据·微服务·架构
Java成神之路-2 天前
集群架构 vs 分布式微服务架构:核心区别通俗拆解
分布式·微服务·架构
952362 天前
Spring-cloud配置中心
java·spring·spring cloud·微服务