Elasticsearch 是一个分布式搜索和分析引擎,广泛应用于日志分析、实时搜索、监控系统等领域。在 Java 生态中,Elasticsearch 提供了官方的 **Java 高级客户端(REST High Level Client)**,用于与 Elasticsearch 集群进行交互。
#### 一、Elasticsearch Java 高级客户端简介
Elasticsearch Java 高级客户端(REST High Level Client)是基于 REST 低级客户端封装的一层客户端,提供了更高级别的抽象,支持同步和异步操作,适用于大多数 Java 项目。
> ⚠️ 注意:Elasticsearch 官方从 7.15 版本开始逐步弃用 REST High Level Client,并推荐使用新的 **Java API Client(基于新的 REST Low Level Client)**。但在 Spring Boot 2.x 及许多旧项目中,仍广泛使用高级客户端。
#### 二、添加 Maven 依赖
使用 Java 高级客户端前,需在 `pom.xml` 中引入以下依赖:
“`xml
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.17.0</version> <!– 根据你的 Elasticsearch 版本选择 –>
</dependency>
“`
#### 三、创建客户端实例
“`java
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost(“localhost”, 9200, “http”)
)
);
“`
建议将客户端配置为单例模式,在应用启动时初始化,避免频繁创建和销毁。
#### 四、基本操作示例
##### 1. 创建索引
“`java
CreateIndexRequest request = new CreateIndexRequest(“my_index”);
client.indices().create(request, RequestOptions.DEFAULT);
“`
##### 2. 插入文档
“`java
IndexRequest indexRequest = new IndexRequest(“my_index”);
indexRequest.id(“1”);
Map<String, Object> jsonMap = new HashMap<>();
jsonMap.put(“title”, “Elasticsearch 入门”);
jsonMap.put(“content”, “学习 Java 客户端的使用”);
indexRequest.source(jsonMap);
client.index(indexRequest, RequestOptions.DEFAULT);
“`
##### 3. 查询文档
“`java
GetRequest getRequest = new GetRequest(“my_index”, “1”);
GetResponse response = client.get(getRequest, RequestOptions.DEFAULT);
System.out.println(response.getSourceAsString());
“`
##### 4. 搜索文档
“`java
SearchRequest searchRequest = new SearchRequest(“my_index”);
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery(“title”, “Elasticsearch”);
sourceBuilder.query(matchQueryBuilder);
searchRequest.source(sourceBuilder);
SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
}
“`
#### 五、连接池与性能优化
为了提升性能,可以配置连接池参数:
“`java
RestClientBuilder builder = RestClient.builder(
new HttpHost(“localhost”, 9200, “http”)
);
builder.setRequestConfigCallback(requestConfigBuilder -> {
requestConfigBuilder
.setConnectTimeout(5000)
.setSocketTimeout(60000)
.setConnectionRequestTimeout(1000);
});
builder.setHttpClientConfigCallback(httpClientBuilder -> {
httpClientBuilder.setMaxConnTotal(100);
httpClientBuilder.setMaxConnPerRoute(50);
return httpClientBuilder;
});
RestHighLevelClient client = new RestHighLevelClient(builder);
“`
#### 六、与 Spring Boot 集成
在 Spring Boot 中,推荐通过配置类创建 `RestHighLevelClient` Bean:
“`java
@Configuration
public class ElasticsearchConfig {
@Bean
public RestHighLevelClient restHighLevelClient() {
return new RestHighLevelClient(
RestClient.builder(
new HttpHost(“localhost”, 9200, “http”)
)
);
}
}
“`
然后在服务中注入并使用:
“`java
@Autowired
private RestHighLevelClient client;
“`
#### 七、注意事项
– 使用完客户端后,记得关闭连接:`client.close();`
– 注意异常处理,避免程序因 Elasticsearch 故障而崩溃
– 避免频繁创建客户端实例,应使用单例模式
– 建议使用连接池和超时机制提升稳定性
—
### ✅ **总结**
Elasticsearch Java 高级客户端是 Java 应用连接 Elasticsearch 的重要工具,虽然已被新客户端取代,但在许多项目中仍广泛使用。掌握其使用方式、配置技巧和性能优化,对于构建高可用、高性能的搜索系统至关重要。
如果你正在使用 Spring Boot 或维护旧系统,建议熟练掌握 `RestHighLevelClient` 的使用方式,并关注官方推荐的新客户端迁移指南。