目录
[12.5 RestClient操作索引库](#12.5 RestClient操作索引库)
[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);
}