Spring Boot 集成 Elasticsearch
立即下载
资源介绍:
Spring Boot 集成 Elasticsearch
package com.minos;
import com.alibaba.fastjson.JSON;
import com.minos.demos.web.constants.HotelConstants;
import com.minos.demos.web.mapper.HotelMapper;
import com.minos.demos.web.pojo.Hotel;
import com.minos.demos.web.pojo.HotelDoc;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.common.xcontent.XContentType;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.io.IOException;
import java.util.List;
@SpringBootTest
class HotelDocumentTest {
@Autowired
private HotelMapper hotelMapper;
@Autowired
private RestHighLevelClient client;
/**
* 测试添加文档的函数
* 该函数主要用于将Hotel对象转换为HotelDoc对象,并将其索引到Elasticsearch中
* 它演示了如何将实体对象映射到Elasticsearch文档,并进行索引
*
* @throws IOException 如果在读取或索引文档时发生IO异常
*/
@Test
void testAddDocument() throws IOException {
// 通过ID查询Hotel实体
Hotel hotel = hotelMapper.selectById(1973839294L);
// 将Hotel实体转换为HotelDoc对象
HotelDoc hotelDoc = new HotelDoc(hotel);
// 创建一个索引请求,指定索引名为"hotel",并设置文档ID为HotelDoc对象的ID
IndexRequest request = new IndexRequest("hotel").id(hotelDoc.getId().toString());
// 将HotelDoc对象转换为JSON字符串,作为索引文档的内容
request.source(JSON.toJSONString(hotelDoc), XContentType.JSON);
// 执行索引请求,将文档索引到Elasticsearch中
client.index(request, RequestOptions.DEFAULT);
}
@Test
/**
* 测试获取文档操作
* 该方法演示了如何从酒店数据索引中检索特定文档,并打印出该文档的信息
* 它通过发送GET请求到指定的索引和文档ID,然后将返回的源数据解析为HotelDoc对象
*
* @throws IOException 如果在与Elasticsearch客户端通信过程中发生错误,则可能抛出此异常
*/
void testGetDocument() throws IOException {
// 创建一个GET请求实例,指定索引名称为"hotel",文档ID为"1973839294"
GetRequest request = new GetRequest("hotel", "1973839294");
// 使用默认的请求选项通过Elasticsearch客户端执行GET请求,并获取响应
GetResponse response = client.get(request, RequestOptions.DEFAULT);
// 将响应的源数据转换为字符串形式
String json = response.getSourceAsString();
// 使用JSON库将JSON字符串解析为HotelDoc对象
HotelDoc hotelDoc = JSON.parseObject(json, HotelDoc.class);
// 打印解析出的HotelDoc对象
System.out.println(hotelDoc);
}
/**
* 测试更新文档的函数
* 该测试函数演示了如何更新指定索引中的文档
* 更新操作涉及增加新的字段或修改现有字段的值
*
* @throws IOException 如果更新请求过程中发生输入输出异常
*/
@Test
void testUpdateDocument() throws IOException {
// 创建一个更新请求,指定要更新的文档所在的索引(index)和文档的唯一标识符(id)
UpdateRequest request = new UpdateRequest("hotel", "1973839294");
// 构建要更新的内容,包括新的字段值对
// 在这里,我们为文档添加/更新了价格和星级名称
request.doc(
"price", 300,
"starName", "四钻"
);
// 执行更新请求
// 这里使用了默认的请求选项(RequestOptions.DEFAULT),适用于大多数情况
client.update(request, RequestOptions.DEFAULT);
}
/**
* 测试删除文档功能
* 该测试方法演示了如何发送一个删除请求以删除指定的文档
*
* @throws IOException 如果与Elasticsearch服务器的交互中出现IO错误
*/
@Test
void testDeleteDocument() throws IOException {
// 创建一个删除请求,指定要删除的文档所在索引为"hotel",文档ID为"1973839294"
DeleteRequest request = new DeleteRequest("hotel","1973839294");
// 执行删除请求,使用默认的请求选项
client.delete(request, RequestOptions.DEFAULT);
}
@Test
/**
* 批量处理酒店数据到Elasticsearch
* 该方法首先从数据库中检索所有酒店信息,然后将这些信息批量索引到Elasticsearch中
* 使用BulkRequest来执行批量操作,以提高效率和吞吐量
*
* @throws IOException 如果与Elasticsearch的交互中发生错误
*/
void testBulkRequest() throws IOException {
// 从数据库检索所有酒店列表
List hotelList = hotelMapper.selectList(null);
// 创建一个BulkRequest对象,用于添加批量操作
BulkRequest request = new BulkRequest();
// 遍历酒店列表,为每个酒店创建一个HotelDoc对象,并将其添加到批量请求中
for (Hotel hotel : hotelList) {
HotelDoc hotelDoc = new HotelDoc(hotel);
// 创建索引请求,并指定索引名称、文档ID和源数据
request.add(new IndexRequest("hotel").id(hotelDoc.getId().toString())
.source(JSON.toJSONString(hotelDoc), XContentType.JSON));
}
// 执行批量请求
client.bulk(request, RequestOptions.DEFAULT);
}
}