赞
踩
SpringBoot整合ES有两种方案,ES官方提供的Elasticsearch Java API Client [8.12] | Elastic和Spring官网提供的Spring Data Elasticsearch
两种方案各有优劣:
Spring:高度封装,用着比较舒服。缺点是更新不及时,有可能无法使用ES新的API
ES官方:更新即使,灵活,缺点是太灵活了,基本是一比一复制REST APIS,项目中使用需要二次封装。
集成:在pom.xml中添加
<dependency>
<groupId>co.elastic.clients</groupId>
<artifactId>elasticsearch-java</artifactId>
<version>8.12.2</version>
</dependency>
<!-- 如果有添加springmvc,此包可不引入 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.3</version>
</dependency>
如果报错 ClassNotFoundException: jakarta.json.spi.JsonProvider
,则还需要添加
<dependency>
<groupId>jakarta.json</groupId>
<artifactId>jakarta.json-api</artifactId>
<version>2.0.1</version>
</dependency>
打印请求:
在application.yml中添加配置,打印 es 的 http 请求(建议在开发调试时使用)
logging:
level:
tracer: TRACE
连接ES:
@Configuration
public class ElasticSearchConfig {
@Bean
public ElasticsearchClient esClient() {
// ES服务器URL String serverUrl = "http://127.0.0.1:9200";
// ES用户名和密码 String userName = "xxx";
String password = "xxx";
BasicCredentialsProvider credsProv = new BasicCredentialsProvider(); credsProv.setCredentials( AuthScope.ANY, new UsernamePasswordCredentials(userName, password) );
RestClient restClient = RestClient .builder(HttpHost.create(serverUrl)) .setHttpClientConfigCallback(hc -> hc.setDefaultCredentialsProvider(credsProv)) .build();
ElasticsearchTransport transport = new RestClientTransport(restClient, new JacksonJsonpMapper());
return new ElasticsearchClient(transport);
}
}
索引操作:
代码中的ESClient就是Elasticsearch,请自行注入bean
// 索引名字
String indexName = "book";
// 索引是否存在
BooleanResponse books = esClient.indices().exists(e -> e.index(indexName)); System.out.println("索引是否存在:" + books.value());
// 创建索引
esClient.indices().create(c -> c .index(indexName) .mappings(mappings -> mappings
.properties("name", p -> p .text(t -> t ,index=false .index(false) ) ) .properties("age", p -> p .long_(t -> t) // long类型 ) ) );
// 删除索引
esClient.indices().delete(d -> d.index(indexName));
搜索:
// 搜索全部
SearchResponse<Account> searchResp = esClient.search(s -> s .index(indexName) .query(q -> q.matchAll(m -> m)) , Account.class );
HitsMetadata<Account> hits = searchResp.hits();
long totalValue = hits.total().value();
// 匹配到的数量
hits.hits().forEach(h -> {
Account acc = h.source(); // 这就是得到的实体类
acc.setId(h.id());
});
本文介绍了SpringBoot整合Elasticsearch的集成方案,但只是简单提及,更详细的方法需要自行查看官方文档。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。