山东大学软件学院项目实训-创新实训-基于大模型的旅游平台(三十)- 微服务(10)
目录
12.5 RestClient操作索引库
12.5.1创建库
12.5.2 删除索引库
12.5.3 判断是否存在
12.6 RestClient操作文档
12.6.1 新增文档
12.6.2 查询文档
12.6.3 修改文档
12.6.4 删除文档
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" } } } }
导入依赖
org.elasticsearch.client elasticsearch-rest-high-level-client 7.12.1
1.8 7.12.1
创建对象
@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 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); }