深入理解 Elasticsearch Java 高级客户端:使用、配置与实战技巧

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` 的使用方式,并关注官方推荐的新客户端迁移指南。

相关文章