【问题标题】:elasticsearch-rest-high-level-client vs elasticsearch-rest-clientelasticsearch-rest-high-level-client vs elasticsearch-rest-client
【发布时间】:2023-04-04 06:49:02
【问题描述】:

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

使用最新的 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 有何不同?

【问题讨论】:

    标签: java spring-boot maven elasticsearch-high-level-restclient elasticsearch-rest-client


    【解决方案1】:

    link 中提到如下:

    Java Low Level REST Client:官方的低级客户端 弹性搜索。它允许与 Elasticsearch 集群通信 通过http。离开请求编组和响应取消编组 给用户。它与所有 Elasticsearch 版本兼容。

    Java High Level REST Client:官方高级客户端 弹性搜索。基于低级客户端,它暴露了特定的 API 方法并处理请求编组和响应 取消编组。

    了解更多信息的最佳方法是阅读以下分别为链接的 javadocs

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

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

    • 避免开发人员重新编写代码,即代码的可维护性和可读性。
    • 帮助开发人员理解 ES 的 API 使用并与之建立关联,就像使用 Kibana 一样
    • 如果还要使用 xpack 的任何功能(图形或 ml),高级客户端 API 具有可用的客户端代码,可以使用这些代码,而无需使用低级 API 重写所有内容。

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

    示例 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链接

    使用低级 Rest 客户端:

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

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

    示例 3:分析文本:

    使用高级休息 Clent:

    利用AnalyzeRequest

    使用低级 Rest 客户端:

    再次使用RequestResponse

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

    希望有帮助!

    【讨论】:

    • 很好的解释,谢谢
    猜你喜欢
    • 2021-11-05
    • 1970-01-01
    • 2020-10-04
    • 1970-01-01
    • 1970-01-01
    • 2019-12-24
    • 2023-04-04
    • 1970-01-01
    • 2021-07-06
    相关资源
    最近更新 更多