【问题标题】:How to fetch data from elasticsearch into java servlet?如何从elasticsearch获取数据到java servlet?
【发布时间】:2022-02-05 15:17:40
【问题描述】:

我正在制作一个应用程序,前端有反应,后端有 java(带有 tomcat 服务器的动态 Web 应用程序)。我有一些数据存储在 elasticsearch 中,我想将它们提取到 java 中并将它们发送到响应前端。不知道如何执行它。任何资源或一些高级想法将不胜感激。

谢谢

【问题讨论】:

    标签: java reactjs elasticsearch tomcat java-ee-6


    【解决方案1】:

    我认为你应该使用以下技术链:

    1. AJAX 用于使用 JSON(浏览器)进行休息调用
    2. 用于获取 JSON 请求的 JAX-RS(服务器)
    3. 从elasticsearch(服务器)获取数据的业务服务
    4. 用于发送 JSON 响应的 JAX-RS(服务器)
    5. 用于接收数据的 AJAX(浏览器)
    6. React 渲染接收到的数据(浏览器)。

    对于服务器项目,您需要添加以下依赖项:

        <dependency>
          <groupId>co.elastic.clients</groupId>
          <artifactId>elasticsearch-java</artifactId>
          <version>7.16.3</version>
        </dependency>
        <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-databind</artifactId>
          <version>2.12.3</version>
        </dependency>
    

    之后你必须为elasticsearch创建一个客户端:

    // Create the low-level client
    RestClient restClient = RestClient.builder(
        new HttpHost("localhost", 9200)).build();
    
    // Create the transport with a Jackson mapper
    ElasticsearchTransport transport = new RestClientTransport(
        restClient, new JacksonJsonpMapper());
    
    // And create the API client
    ElasticsearchClient client = new ElasticsearchClient(transport);
    

    在业务服务(或您的 serlet)中,您使用此客户端从 ES 检索数据:

    SearchResponse<Product> search = client.search(s -> s
        .index("products")
        .query(q -> q
            .term(t -> t
                .field("name")
                .value(v -> v.stringValue("bicycle"))
            )),
        Product.class);
    
    for (Hit<Product> hit: search.hits().hits()) {
        processProduct(hit.source());
    }
    

    上述代码 sn-p 从“product”索引中搜索名称与“bicycle”匹配的所有项目,并将它们作为 Product 应用程序类的实例返回。

    更多关于java客户端的信息可以参考官方ES文档here

    【讨论】:

    • 我不明白。你能详细说明一下吗?
    • 不用担心客户端,我只想知道如何在java servlet中从elasticsearch中获取数据。就是这样
    • @Shelton 我更新了我的答案。我希望它能给出基本的解释。
    • 我正在编写一个动态 Web 应用程序,所以我必须安装 jar 文件。我安装了您提到的两个罐子(作为依赖项)。但 ElasticsearchTransport 无法解析。我是否必须包括任何其他 jar fies
    • @Shelton 将您的问题分成两部分。第一部分是从 ES 中提取数据。为此,运行您的 ES 服务器,打开您的 IDE,创建新的 maven 项目。将我列出的依赖项添加到您的 pom.xml 中。之后使用 main 方法创建一个新类。添加我给 main 方法的代码。根据您的数据修改代码。解决其他问题以读取数据并在控制台上打印。当(如果)一切正常时,请查看您的 IDE 使用了哪些依赖项。使用它们。这是第二部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-06
    • 2013-10-24
    • 1970-01-01
    • 2023-03-20
    • 2017-03-26
    • 1970-01-01
    相关资源
    最近更新 更多