ElasticSearch基础3(RestClient(1.对索引库的crud和文档的crud))
提示:以下是本篇文章正文内容,下面案例可供参考
一、RestAPI
ES官方提供了各种不同语言的客户端,用来操作ES。这些客户端的本质就是组装DSL语句,通过http请求发送给ES。官方文档地址:https://www.elastic.co/guide/en/elasticsearch/client/index.html
其中的Java Rest Client又包括两种:
- Java Low Level Rest Client
- Java High Level Rest Client
我们学习的是Java HighLevel Rest Client客户端API
二、RestAPI操作索引库
1.初始化RestClient
在elasticsearch提供的API中,与elasticsearch一切交互都封装在一个名为RestHighLevelClient的类中,必须先完成这个对象的初始化,建立与elasticsearch的连接。
分为三步:
1)引入es的RestHighLevelClient依赖:
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
</dependency>
2)因为SpringBoot默认的ES版本是7.6.2,所以我们需要覆盖默认的ES版本:
<properties>
<java.version>1.8</java.version>
<elasticsearch.version>7.12.1</elasticsearch.version>
</properties>
3)初始化RestHighLevelClient:
初始化的代码如下:
RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(
HttpHost.create("http://你自己的本级ip地址:9200")
));
这里为了单元测试方便,我们创建一个测试类HotelIndexTest,然后将初始化的代码编写在@BeforeEach方法中:
package cn.itcast.hotel;
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestHighLevelClient;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import java.io.IOException;
public class HotelIndexTest {
private RestHighLevelClient client;
@BeforeEach
void setUp() {
this.client = new RestHighLevelClient(RestClient.builder(
HttpHost.create("http://192.168.150.101:9200")
));
}
@AfterEach
void tearDown() throws IOException {
this.client.close();
}
}
2.创建索引库
//创建索引库
@Test
void createHotelIndex() throws IOException {
//1.创建Request对象
CreateIndexRequest hotel = new CreateIndexRequest("hotel");
//2.准备请求的参数,DSL语句
hotel.source(MAPPING_TEMPLATE, XContentType.JSON);
//3.发送请求
client.indices().create(hotel, RequestOptions.DEFAULT);
}
3.删除索引库
//删除索引库
@Test
void testDeleteHotelIndex() throws IOException {
DeleteIndexRequest hotel = new DeleteIndexRequest("hotel");
client.indices().delete(hotel,RequestOptions.DEFAULT);
}
4.判断索引库是否存在
//判断索引库是否存在
@Test
void testExistsHotelIndex() throws IOException {
GetIndexRequest hotel = new GetIndexRequest("hotel");
boolean exists = client.indices().exists(hotel, RequestOptions.DEFAULT);
System.out.println(exists);
}
三、RestAPI操作文档
1.新增文档
private RestHighLevelClient client;
@Autowired
private HotelService hotelService;
//新增文档
@Test
void testAddDocument() throws IOException {
//根据id查询酒店数据
Hotel hotel = hotelService.getById(61083);
//转换数据类型
HotelDoc hotelDoc = new HotelDoc(hotel);
//1.准备Request对象
IndexRequest request = new IndexRequest("hotel").id(hotelDoc.getId().toString());
//2.准备Json文档
request.source(JSON.toJSONString(hotelDoc),XContentType.JSON);
//3.发送请求
client.index(request,RequestOptions.DEFAULT);
}
2.获取文档
@Test
void testGetDocument() throws IOException {
//准备request请求
GetRequest request = new GetRequest("hotel", "61083");
//发送请求获取返回对象
GetResponse documentFields = client.get(request, RequestOptions.DEFAULT);
//对象转为json
String sourceAsString = documentFields.getSourceAsString();
//json转为对应类型对象
HotelDoc hotelDoc = JSON.parseObject(sourceAsString, HotelDoc.class);
//输出
System.out.println(hotelDoc);
}
3.更新文档
//更新文档
@Test
void testUpdateDocument() throws IOException {
//创建请求对象
UpdateRequest req = new UpdateRequest("hotel", "61083");
//更新
req.doc(
"price","999",
"starName","六钻"
);
//发送请求
client.update(req,RequestOptions.DEFAULT);
}
4.删除文档
//删除文档
@Test
void testDeleteDocument() throws IOException {
//创建请求参数
DeleteRequest req = new DeleteRequest("hotel", "61083");
client.delete(req, RequestOptions.DEFAULT);
}
5.批量添加文档
//批量添加文档
@Test
void testBulkDocument() throws IOException {
List<Hotel> list = hotelService.list();
//创建对象
BulkRequest request = new BulkRequest();
for (Hotel hotel:list){
HotelDoc hotelDoc = new HotelDoc(hotel);
request.add(new IndexRequest("hotel").id(hotel.getId().toString()).source(JSON.toJSONString(hotelDoc),XContentType.JSON));
}
client.bulk(request,RequestOptions.DEFAULT);
}
小结
文档操作的基本步骤:
- 初始化RestHighLevelClient
- 创建XxxRequest。XXX是Index、Get、Update、Delete、Bulk
- 准备参数(Index、Update、Bulk时需要)
- 发送请求。调用RestHighLevelClient#.xxx()方法,xxx是index、get、update、delete、bulk
- 解析结果(Get时需要)