整合springboot
springboot
依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
spring中es版本和本地不一样,太老,要自己手动控制版本
<elasticsearch.version>7.15.1</elasticsearch.version>
client配置文件
@Configuration
public class ESClientConfig {
@Bean
public RestHighLevelClient restHighLevelClient() {
return new RestHighLevelClient(
RestClient.builder(
new HttpHost("localhost", 9200, "http")));
}
}
索引操作测试
@Autowired
@Qualifier("restHighLevelClient")
private RestHighLevelClient client;
//创建索引
@Test
public void createIndex() throws IOException {
CreateIndexRequest request = new CreateIndexRequest("jpy_index");
CreateIndexResponse response = client.indices().create(request, RequestOptions.DEFAULT);
System.out.println(response);
}
//判断索引是否存在
@Test
public void existsIndex() throws IOException {
GetIndexRequest request = new GetIndexRequest("jpy_index");
boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
System.out.println(exists);
}
//删除索引
@Test
public void delIndex() throws IOException {
DeleteIndexRequest request = new DeleteIndexRequest("jpy_index");
AcknowledgedResponse response = client.indices().delete(request, RequestOptions.DEFAULT);
System.out.println(response.isAcknowledged());
}
文档操作测试
@Test
public void addDoc() throws IOException {
//数据对象
User user = new User("桃子好好", 18);
//创建请求
IndexRequest request = new IndexRequest("jpy_index");
//规则:PUT 索引/_doc/id
request.id("1");
request.timeout("1s");
//将数据放入请求
request.source(JSONObject.toJSONString(user), XContentType.JSON);
//客户端发送请求
IndexResponse response = client.index(request, RequestOptions.DEFAULT);
System.out.println(response.toString());
System.out.println(response.status());//状态,对应为CREATED
}
//判断是否存在某个文档
@Test
public void existsDoc() throws IOException {
GetRequest request = new GetRequest("jpy_index", "2");
//不获取返回的_source的上下文
request.fetchSourceContext();
boolean b = client.exists(request, RequestOptions.DEFAULT);
System.out.println(b);
}
//获取文档信息
@Test
public void getDoc() throws IOException {
GetRequest request = new GetRequest("jpy_index", "1");
GetResponse response = client.get(request, RequestOptions.DEFAULT);
System.out.println(response.toString());
System.out.println(response.getSourceAsString());
System.out.println(response.getSource());
System.out.println(response.getSourceAsMap());
}
//更新文档
@Test
public void updateDoc() throws IOException {
UpdateRequest request = new UpdateRequest("jpy_index", "1");
User user = new User("桃子123", 19);
request.doc(JSONObject.toJSONString(user), XContentType.JSON);
UpdateResponse response = client.update(request, RequestOptions.DEFAULT);
System.out.println(response.status());
}
//删除某条文档
@Test
public void deleteDoc() throws IOException {
DeleteRequest request = new DeleteRequest("jpy_index", "1");
DeleteResponse response = client.delete(request, RequestOptions.DEFAULT);
System.out.println(response.status());//删除不存在的,会NOT_FOUND
}
//批量添加文档
//批量增删改都是如此
@Test
public void addBulkDoc() throws IOException {
BulkRequest request = new BulkRequest("jpy_index");
List<User> userList = new ArrayList<>();
userList.add(new User("张三", 10));
userList.add(new User("李四", 20));
userList.add(new User("王五", 30));
userList.add(new User("赵六", 40));
for (int i = 0; i < userList.size(); i++) {
request.add(new IndexRequest().id("" + (i + 1)).source(JSONObject.toJSONString(userList.get(i)), XContentType.JSON));
}
BulkResponse response = client.bulk(request, RequestOptions.DEFAULT);
System.out.println(response.status());
}
/*
* 1.搜索请求 SearchRequest
* 2.条件构造 SearchSourceBuilder//////高亮构造 HighlightBuilder
* */
@Test
public void search() throws IOException {
//创建搜索请求
SearchRequest searchRequest = new SearchRequest("jpy_index");
//构建搜索条件
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
//高亮构造
HighlightBuilder highlightBuilder = new HighlightBuilder();
sourceBuilder.highlighter(highlightBuilder);
//查询条件,我们可以通过QueryBuilders工具来实现
//QueryBuilders.termQuery 精确
//QueryBuilders.matchAllQuery() 匹配所有
TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name.keyword", "张三");
sourceBuilder.query(termQueryBuilder);
sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
searchRequest.source(sourceBuilder);
SearchResponse search = client.search(searchRequest, RequestOptions.DEFAULT);
System.out.println(search.status());
//System.out.println(JSONObject.toJSONString(search.getHits()));
for (SearchHit hit : search.getHits().getHits()) {
System.out.println(hit.getSourceAsMap());
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY