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