”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 使用 Java 高级 REST 客户端提升您的 Elasticsearch 体验 ()

使用 Java 高级 REST 客户端提升您的 Elasticsearch 体验 ()

发布于2024-08-01
浏览:934

Elevate Your Elasticsearch Experience with Java High Level REST Client ()

介绍

Java High Level REST Client (7.x) 是一个与 Elasticsearch 集群交互的强大工具,使服务器通信更加容易访问和高效。在本指南中,我们将引导您完成在阿里云 Elasticsearch 集群上使用高级 REST 客户端调用 Elasticsearch Java API 的步骤。

准备工作

第1步:创建Elasticsearch集群

确保您的集群版本与您计划使用的 Java High Level REST Client 版本相同或更高。有关分步说明,请参阅创建阿里云 Elasticsearch 集群。

第 2 步:启用自动索引

在 YAML 配置文件中启用自动索引功能。具体请参见配置YML文件。

步骤3:配置IP地址白名单

通过配置IP地址白名单确保正常通信。如果您通过 Internet 访问集群,请按照配置公共或私有 IP 地址白名单中的指南允许来自所需 IP 地址的请求。

第四步:安装JDK

安装 Java 开发工具包 (JDK) 1.8 或更高版本。有关详细信息,请参阅安装 JDK。

第5步:创建Java Maven项目

将必要的依赖项添加到您的 pom.xml 文件中。将依赖项中的版本号从 7.x 更改为您正在使用的高级 REST 客户端的特定版本。


    org.elasticsearch.client
    elasticsearch-rest-high-level-client
    7.x


    org.apache.logging.log4j
    log4j-core
    2.20.0


    org.apache.logging.log4j
    log4j-api
    2.20.0

示例:管理索引

下面是使用高级 REST 客户端创建和删除索引的示例。将占位符 {} 替换为您的具体参数。

import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.nio.client.HttpAsyncClientBuilder;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.*;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

public class RestClientExample {
    private static final RequestOptions COMMON_OPTIONS;

    static {
        RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder();
        builder.setHttpAsyncResponseConsumerFactory(
                new HttpAsyncResponseConsumerFactory
                        .HeapBufferedResponseConsumerFactory(30 * 1024 * 1024));
        COMMON_OPTIONS = builder.build();
    }

    public static void main(String[] args) {
        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
        credentialsProvider.setCredentials(AuthScope.ANY, 
            new UsernamePasswordCredentials("{Username}", "{Password}"));

        RestClientBuilder builder = RestClient.builder(new HttpHost("{Endpoint of the Elasticsearch cluster}", 9200, "http"))
                .setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
                    @Override
                    public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
                        return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
                    }
                });

        RestHighLevelClient highClient = new RestHighLevelClient(builder);

        try {
            Map jsonMap = new HashMap();
            jsonMap.put("{field_01}", "{value_01}");
            jsonMap.put("{field_02}", "{value_02}");

            IndexRequest indexRequest = new IndexRequest("{index_name}", "_doc", "{doc_id}").source(jsonMap);
            IndexResponse indexResponse = highClient.index(indexRequest, COMMON_OPTIONS);
            long version = indexResponse.getVersion();
            System.out.println("Index document successfully! "   version);

            DeleteRequest deleteRequest = new DeleteRequest("{index_name}", "_doc", "{doc_id}");
            DeleteResponse deleteResponse = highClient.delete(deleteRequest, COMMON_OPTIONS);
            System.out.println("Delete document successfully! \n"   deleteResponse.toString());

            highClient.close();
        } catch (IOException ioException) {
            ioException.printStackTrace();
        }
    }
}

高并发配置

针对高并发场景,增加客户端连接数:

httpClientBuilder.setMaxConnTotal(500);
httpClientBuilder.setMaxConnPerRoute(300);

示例代码片段:

String host = "127.0.0.1";
int port = 9200;
String username = "elastic";
String password = "passwd";
final int max_conn_total = 500;
final int max_conn_per_route = 300;

RestHighLevelClient restHighLevelClient = new RestHighLevelClient(
  RestClient.builder(new HttpHost(host, port, "http")).setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
    public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
      httpClientBuilder.setMaxConnTotal(max_conn_total);
      httpClientBuilder.setMaxConnPerRoute(max_conn_per_route);
      return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
    }
  })
);

有关功能和配置的更多详细信息,请参阅官方 Java High Level REST Client 文档。

结论

使用 Java High Level REST Client 可确保与阿里云 Elasticsearch 集群高效交互。按照本指南充分利用您的 Elasticsearch 设置。
准备好开始阿里云上的 Elasticsearch 之旅了吗?探索我们量身定制的云解决方案和服务,将您的数据转变为视觉杰作。

单击此处开始 30 天免费试用

版本声明 本文转载于:https://dev.to/a_lucas/elevate-your-elasticsearch-experience-with-java-high-level-rest-client-7x-348k?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 插入数据时如何修复“常规错误:2006 MySQL 服务器已消失”?
    插入数据时如何修复“常规错误:2006 MySQL 服务器已消失”?
    插入记录时如何解决“一般错误:2006 MySQL 服务器已消失”介绍:将数据插入 MySQL 数据库有时会导致错误“一般错误:2006 MySQL 服务器已消失”。当与服务器的连接丢失时会出现此错误,通常是由于 MySQL 配置中的两个变量之一所致。解决方案:解决此错误的关键是调整wait_tim...
    编程 发布于2024-12-22
  • 在 Go 中使用 WebSocket 进行实时通信
    在 Go 中使用 WebSocket 进行实时通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSocke...
    编程 发布于2024-12-22
  • 尽管代码有效,为什么 POST 请求无法捕获 PHP 中的输入?
    尽管代码有效,为什么 POST 请求无法捕获 PHP 中的输入?
    解决 PHP 中的 POST 请求故障在提供的代码片段中:action=''而不是:action="<?php echo $_SERVER['PHP_SELF'];?>";?>"检查 $_POST数组:表单提交后使用 var_dump 检查 $_POST 数...
    编程 发布于2024-12-22
  • 如何使用 MySQL 查找今天生日的用户?
    如何使用 MySQL 查找今天生日的用户?
    如何使用 MySQL 识别今天生日的用户使用 MySQL 确定今天是否是用户的生日涉及查找生日匹配的所有行今天的日期。这可以通过一个简单的 MySQL 查询来实现,该查询将存储为 UNIX 时间戳的生日与今天的日期进行比较。以下 SQL 查询将获取今天有生日的所有用户: FROM USERS ...
    编程 发布于2024-12-22
  • 如何修复 macOS 上 Django 中的“配置不正确:加载 MySQLdb 模块时出错”?
    如何修复 macOS 上 Django 中的“配置不正确:加载 MySQLdb 模块时出错”?
    MySQL配置不正确:相对路径的问题在Django中运行python manage.py runserver时,可能会遇到以下错误:ImproperlyConfigured: Error loading MySQLdb module: dlopen(/Library/Python/2.7/site-...
    编程 发布于2024-12-22
  • 除了“if”语句之外:还有哪些地方可以在不进行强制转换的情况下使用具有显式“bool”转换的类型?
    除了“if”语句之外:还有哪些地方可以在不进行强制转换的情况下使用具有显式“bool”转换的类型?
    无需强制转换即可上下文转换为 bool您的类定义了对 bool 的显式转换,使您能够在条件语句中直接使用其实例“t”。然而,这种显式转换提出了一个问题:“t”在哪里可以在不进行强制转换的情况下用作 bool?上下文转换场景C 标准指定了四种值可以根据上下文转换为的主要场景bool:语句:if、whi...
    编程 发布于2024-12-22
  • Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta:列偏移的删除和恢复Bootstrap 4 在其 Beta 1 版本中引入了重大更改柱子偏移了。然而,随着 Beta 2 的后续发布,这些变化已经逆转。从 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    编程 发布于2024-12-22
  • 为什么 Chrome 自动更新会导致 Selenium 兼容性问题?
    为什么 Chrome 自动更新会导致 Selenium 兼容性问题?
    了解问题:自动 Chrome 更新与 Selenium 兼容性Selenium 是一种广泛使用的 Web 自动化工具,利用 ChromeDriver 与Chrome 浏览器。但是,由于 Chrome 自动更新,您的代码可能会失败,从而导致您的测试不可靠。冲突背后的原因每个 Chrome 浏览器版本都...
    编程 发布于2024-12-22
  • 大批
    大批
    方法是可以在对象上调用的 fns 数组是对象,因此它们在 JS 中也有方法。 slice(begin):将数组的一部分提取到新数组中,而不改变原始数组。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index p...
    编程 发布于2024-12-22
  • 如何在 PHP 中组合两个关联数组,同时保留唯一 ID 并处理重复名称?
    如何在 PHP 中组合两个关联数组,同时保留唯一 ID 并处理重复名称?
    在 PHP 中组合关联数组在 PHP 中,将两个关联数组组合成一个数组是一项常见任务。考虑以下请求:问题描述:提供的代码定义了两个关联数组,$array1 和 $array2。目标是创建一个新数组 $array3,它合并两个数组中的所有键值对。 此外,提供的数组具有唯一的 ID,而名称可能重合。要求...
    编程 发布于2024-12-22
  • HTML 格式标签
    HTML 格式标签
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    编程 发布于2024-12-22
  • 如何使用 DockerMake 将多个 Docker 映像组合成一个单元?
    如何使用 DockerMake 将多个 Docker 映像组合成一个单元?
    Docker:组合多个镜像Docker 是一个容器化平台,可以实现应用程序及其依赖项的隔离和打包。虽然它通常用于管理单个图像,但在某些情况下您可能需要将多个图像组合成一个单元。组合通用图像和特定图像:场景考虑一个场景,您拥有通用的 Java 和 MySQL 映像,并且您想要创建一个结合了 Java ...
    编程 发布于2024-12-22
  • 如何通过命令行运行某个目录下的所有Go文件?
    如何通过命令行运行某个目录下的所有Go文件?
    使用命令行运行目录中的所有 Go 文件作为 Go 的初学者,在处理多个文件时可能会遇到挑战在你的包裹里。虽然执行主文件的传统方法(例如 go run main.go)可能不够,但有一个更有效的解决方案。要从命令行执行目录中的所有 Go 文件,您可以只需使用命令 go run .. 该命令利用了一项特...
    编程 发布于2024-12-22
  • 如何从 SQLite 中的 DATETIME 字段中提取月份?
    如何从 SQLite 中的 DATETIME 字段中提取月份?
    从 SQLite 中的 DATETIME 检索月份您最近在从 SQLite 中的 DATETIME 字段中提取月份时遇到了困难。虽然 Month(dateField) 和 strftime('%m', dateStart) 等方法被证明无效,但这里有一个解决方案可以帮助您成功检索月份...
    编程 发布于2024-12-22
  • 使用 `mysql_real_escape_string()` 和 `mysql_escape_string()` 足以保护您的应用程序吗?
    使用 `mysql_real_escape_string()` 和 `mysql_escape_string()` 足以保护您的应用程序吗?
    mysql_real_escape_string() 和 mysql_escape_string() 足以保证应用安全吗?虽然这些函数可以提供一些针对 SQL 注入和其他攻击的保护,他们未能解决某些漏洞。SQL如果您在查询中不正确地处理 PHP 变量,注入Mysql_real_escape_stri...
    编程 发布于2024-12-22

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3