elasticsearch-rest-high-level-client 与 elasticsearch-rest-client

elasticsearch-rest-high-level-client vs elasticsearch-rest-client

我是 Elastic 搜索的新手。开始使用 Elastic search 构建 Spring 引导应用程序。

使用最新的 ES 版本 "elasticsearch-7.7.1" 并且为了集成,我使用以下 maven 依赖项:

 <dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>7.7.1</version>
 </dependency>

我在应用程序启动时遇到问题,通过添加以下依赖项修复:

   <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>elasticsearch-rest-client</artifactId>
        <version>7.7.1</version>
    </dependency>

谁能解释为什么需要 elasticsearch-rest-client 以及它与 elasticsearch-rest-high-level-client 有何不同?

link中提到如下:

Java Low Level REST Client: the official low-level client for Elasticsearch. It allows to communicate with an Elasticsearch cluster through http. Leaves requests marshalling and responses un-marshalling to users. It is compatible with all Elasticsearch versions.

Java High Level REST Client: the official high-level client for Elasticsearch. Based on the low-level client, it exposes API specific methods and takes care of requests marshalling and responses un-marshalling.

了解更多信息的最佳方法是阅读下面分别是 link 的 javadocs

High Level Rest Client 使用了 Low Level Rest Client,我相信这意味着,它 扩展了 classes 和接口 Low Level Rest Client

使用 High Level 优于 Low Level 的优点是:

  • 避免开发人员重写代码或代码的可维护性和可读性。
  • 帮助开发人员理解 ES 的 API 用法并与之相关联,就像使用 Kibana
  • 如果要使用任何 xpack 功能(图形或 ml),高级客户端 API 具有可用的客户端代码,无需使用低级 [=104] 重写所有内容即可使用=].

下面的示例可以帮助我猜测:

示例 1:获取特定文档

使用高级 Rest 客户端:

GetRequest getRequest = new GetRequest("posts", "1");   

使用低级别 Rest 客户端:

Request request = new Request("GET", "/posts/1");

示例 2:搜索 API

使用高级 Rest 客户端:

SearchRequest searchRequest = new SearchRequest("posts"); 

可以参考this link

使用低级别 Rest 客户端:

您需要使用 RequestResponse classes(低级别)并使用适当的端点

Request request = new Request("GET", "/posts/_search");

示例 3:分析文本:

有高级 Rest 客户端:

利用AnalyzeRequestclass

使用低级别 Rest 客户端:

再次使用RequestResponseclass

基本上在 High Level Rest Client 上工作就像在 Elasticsearch 的 API 层上工作(通过 HTTP 包间接工作)Low Level 纯粹在 HTTP 上工作,即 Request and Response 模型,即更高的抽象。

希望对您有所帮助!