从高级 REST 客户端迁移编辑

Elasticsearch Java API 客户端是一个全新的客户端库,与旧的高级 REST 客户端 (HLRC) 没有任何关系。这是一个经过慎重考虑的选择,旨在提供一个独立于 Elasticsearch 服务器代码的库,并为所有 Elasticsearch 功能提供非常一致且易于使用的 API。

因此,从 HLRC 迁移需要对应用程序代码进行一些重写。但是,这种转换可以逐步进行,因为两个客户端库可以在单个应用程序中共存,而不会产生任何运营开销。

兼容模式:将 7.17 客户端与 Elasticsearch 8.x 一起使用编辑

通过启用 HLRC 的兼容模式(请参阅下面的代码示例),HLRC 版本 7.17 可以与 Elasticsearch 版本 8.x 一起使用。在此模式下,HLRC 会发送额外的标头,指示 Elasticsearch 8.x 的行为类似于 7.x 服务器。

Java API 客户端不需要此设置,因为始终启用兼容模式。

您可以将 HLRC 版本 7.x 与 Java API 客户端版本 8.x 一起使用

dependencies {
    implementation 'co.elastic.clients:elasticsearch-java:8.14.3'
    implementation 'org.elasticsearch.client:elasticsearch-rest-high-level-client:7.17.4'
    // other dependencies 
}

请参阅安装

将相同的 http 客户端与 HLRC 和 Java API 客户端一起使用编辑

为了避免在应用程序同时使用 HLRC 和新的 Java API 客户端的过渡阶段产生任何运营开销,两个客户端可以共享同一个低级 REST 客户端,它是管理所有连接、轮询策略、节点嗅探等的网络层。

下面的代码显示了如何使用相同的 HTTP 客户端初始化两个客户端

// Create the low-level client
RestClient httpClient = RestClient.builder(
    new HttpHost("localhost", 9200)
).build();

// Create the HLRC
RestHighLevelClient hlrc = new RestHighLevelClientBuilder(httpClient)
    .setApiCompatibilityMode(true) 
    .build();

// Create the Java API Client with the same low level client
ElasticsearchTransport transport = new RestClientTransport(
    httpClient,
    new JacksonJsonpMapper()
);

ElasticsearchClient esClient = new ElasticsearchClient(transport);

// hlrc and esClient share the same httpClient

启用兼容模式,允许 HLRC 7.17 与 Elasticsearch 8.x 一起使用。

过渡策略编辑

您可以通过不同的方式开始在应用程序代码中从 HLRC 过渡。

例如

  • 保持现有代码不变,并为应用程序中的新功能使用新的 Java API 客户端,然后在稍后迁移现有代码,
  • 重写应用程序中新的 Java API 客户端比 HLRC 更易于使用的部分,例如与搜索相关的所有内容,
  • 通过利用新的 Java API 客户端与 JSON 对象映射器的紧密集成,重写需要将应用程序对象映射到 JSON 或从 JSON 映射应用程序对象的部分。