,3修改文档
修改有两种方式:
全量修改:直接覆盖原来的文档
增量修改:修改文档中的部分字段
全量修改是覆盖原来的文档,其本质是:
根据指定的id删除文档
新增一个相同id的文档
注意:如果根据id删除时,id不存在,第二步的新增也会执行,也就从修改变成了新增操作了。
语法:
PUT?/{索引库名}/_doc/文档id { ????"字段1":?"值1", ????"字段2":?"值2", ? ?// ... 略 }
示例:
PUT?/heima/_doc/1 { ????"info":?"黑马程序员高级Java讲师", ????"email":?"zy@itcast.cn", ????"name":?{ ????????"firstName":?"云", ????????"lastName":?"赵" ????} }
增量修改是只修改指定id匹配的文档中的部分字段。
语法:
POST?/{索引库名}/_update/文档id { ????"doc": { ? ? ? ? "字段名":?"新的值", ? } }
示例:
//创建文档
@Test
void testAddDocument() throws IOException {
//1,根据id查询出数据库酒店数据
Hotel hotel = hotelService.getById(61083L);
//2,转换为文档类型
HotelDoc hotelDoc = new HotelDoc(hotel);
//3,将HotelDoc转Json
String json = JSON.toJSONString(hotelDoc);
//1,准备Request对象
IndexRequest request = new IndexRequest("hotel").id(hotelDoc.getId().toString());
//2,准备Json文档
request.source(json,XContentType.JSON);
//3,发送请求
client.index(request,RequestOptions.DEFAULT);
}
//查询文档
@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();
HotelDoc hotelDoc = JSON.parseObject(json, HotelDoc.class);
System.out.println(hotelDoc);
}
//更新文档
@Test
void testUpdateDocument() throws IOException {
// 1.准备Request
UpdateRequest request = new UpdateRequest("hotel", "61083");
// 2.准备请求参数
request.doc(
"price", "952",
"starName", "四钻"
);
// 3.发送请求
client.update(request, RequestOptions.DEFAULT);
}
//删除文档
@Test
void testDeleteDocument() throws IOException {
//1,准备Request
DeleteRequest request = new DeleteRequest("hotel", "61083");
//3,发送请求
client.delete(request,RequestOptions.DEFAULT);
}
批量处理BulkRequest,其本质就是将多个普通的CRUD请求组合在一起发送。
其中提供了一个add方法,用来添加其他请求:
可以看到,能添加的请求包括:
IndexRequest,也就是新增
UpdateRequest,也就是修改
DeleteRequest,也就是删除
因此Bulk中添加了多个IndexRequest,就是批量新增功能了。示例:
//批量创建文档
@Test
void testBulkRequest() throws IOException {
// 批量查询酒店数据
List<Hotel> hotels = hotelService.list();
// 1.创建Request
BulkRequest request = new BulkRequest();
// 2.准备参数,添加多个新增的Request
for (Hotel hotel : hotels) {
// 2.1.转换为文档类型HotelDoc
HotelDoc hotelDoc = new HotelDoc(hotel);
// 2.2.创建新增文档的Request对象
request.add(new IndexRequest("hotel")
.id(hotelDoc.getId().toString())
.source(JSON.toJSONString(hotelDoc), XContentType.JSON));
}
// 3.发送请求
client.bulk(request, RequestOptions.DEFAULT);
}