从高级 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.16.0'
    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 更易于使用的那部分代码,例如与搜索相关的所有内容;
  • 重写需要将应用程序对象映射到/从 JSON 的部分,利用新的 Java API 客户端与 JSON 对象映射器的紧密集成。