资讯专栏INFORMATION COLUMN

Elasticsearch Java API 6.2(java client)

Gu_Yan / 2555人阅读

摘要:高级客户端目前支持更常用的,但还有很多东西需要补充,您可以通过告诉我们您的应用程序需要哪些缺失的来帮助我们优化优先级,通过向这个添加注释高级客户端完整性。传输客户端排除非数据节点的原因是为了避免将搜索流量发送给主节点。

前言

本节描述了Elasticsearch提供的Java API,所有的Elasticsearch操作都使用客户端对象执行,所有操作本质上都是完全异步的(要么接收监听器,要么未来返回)。

此外,客户端上的操作可能会大量累积和执行。

注意,所有的API都是通过Java API公开的(实际上,Java API是在内部使用以执行它们的)。

警告
我们计划在Elasticsearch 7.0中对TransportClient进行弃用,并在8.0中完全删除它,替而代之,你应该使用Java高级REST客户端,它执行HTTP请求而不是序列化的Java请求。迁移指南描述了迁移所需的所有步骤。

Java高级REST客户端目前支持更常用的API,但还有很多东西需要补充,您可以通过告诉我们您的应用程序需要哪些缺失的API来帮助我们优化优先级,通过向这个issue添加注释:Java高级REST客户端完整性。

任何丢失的API都可以通过使用具有JSON请求和响应主体的低级Java REST客户端来实现。

Javadoc

transport clientjavadoc可以在这里找到:https://artifacts.elastic.co/...。

Maven存储库

Elasticsearch驻留在Maven Central上。

例如,您可以在pom.xml文件中定义最新的版本:


    org.elasticsearch.client
    transport
    6.2.4
Lucene Snapshot存储库

任何主要版本(如beta)的第一个releases版本都可能构建在Lucene Snapshot版本之上,在这种情况下,您将无法解析客户端的Lucene依赖项。

例如,如果您想使用基于Lucene 7.0.0-snapshot-00142c9的6.0.0-beta1版本,您必须定义以下存储库。

Maven:


    elastic-lucene-snapshots
    Elastic Lucene Snapshots
    http://s3.amazonaws.com/download.elasticsearch.org/lucenesnapshots/00142c9
    true
    false

Gradle:

maven {
    url "http://s3.amazonaws.com/download.elasticsearch.org/lucenesnapshots/00142c9"
}
Log4j 2记录器

您还需要包括Log4j 2依赖项:


    org.apache.logging.log4j
    log4j-core
    2.9.1

并在类路径中提供Log4j 2配置文件,例如,你可以给你的src/main/resources工程目录添加一个log4j2.properties文件,像这样:

appender.console.type = Console
appender.console.name = console
appender.console.layout.type = PatternLayout

rootLogger.level = info
rootLogger.appenderRef.console.ref = console
使用另一个记录器

如果你想使用另一个日志记录器,而不是Log4j 2,你可以使用SLF4J bridge来实现这一点:


    org.apache.logging.log4j
    log4j-to-slf4j
    2.9.1


    org.slf4j
    slf4j-api
    1.7.24

这个页面列出了可以使用的实现,选择您最喜欢的日志记录器,并将其作为依赖项添加。例如,我们将使用slf4j-simple 日志记录器:


    org.slf4j
    slf4j-simple
    1.7.21
java客户端

你可以通过多种方式使用Java客户端:

在现有集群上执行标准索引、获取、删除和搜索操作

在运行的集群上执行管理任务

获取一个Elasticsearch客户端很简单,获取客户端最常见的方法是创建一个连接到集群的TransportClient

重要
客户端必须具有与集群中的节点相同的主版本(例如,2.x,或5.x),客户端可能连接到具有不同次要版本的集群(例如2.3.x),但可能不支持新功能,理想情况下,客户端应该具有与集群相同的版本。
警告
我们计划在Elasticsearch 7.0中对TransportClient进行弃用,并在8.0中完全删除它,替而代之,你应该使用Java高级REST客户端,它执行HTTP请求而不是序列化的Java请求。迁移指南描述了迁移所需的所有步骤。

Java高级REST客户端目前支持更常用的API,但还有很多东西需要补充,您可以通过告诉我们您的应用程序需要哪些缺失的API来帮助我们优化优先级,通过向这个issue添加注释:Java高级REST客户端完整性。

任何丢失的API都可以通过使用具有JSON请求和响应主体的低级Java REST客户端来实现。

传输客户端

TransportClient使用传输模块远程连接到Elasticsearch集群,它不加入集群,但只需获取一个或多个初始传输地址,并在每个操作上以循环的方式与它们通信(尽管大多数操作可能是“两跳”操作)。

// on startup

TransportClient client = new PreBuiltTransportClient(Settings.EMPTY)
        .addTransportAddress(new TransportAddress(InetAddress.getByName("host1"), 9300))
        .addTransportAddress(new TransportAddress(InetAddress.getByName("host2"), 9300));

// on shutdown

client.close();

注意,如果你使用的是与“elasticsearch”不同的集群名称,则必须设置集群名称:

Settings settings = Settings.builder()
        .put("cluster.name", "myClusterName").build();
TransportClient client = new PreBuiltTransportClient(settings);
//Add transport addresses and do something with the client...

传输客户端具有集群嗅探特性,允许动态添加新主机并删除旧主机,当启用嗅探时,传输客户机将连接到其内部节点列表中的节点,这些节点是通过调用addTransportAddress构建的。在此之后,客户端将调用这些节点上的内部集群状态API来发现可用的数据节点,客户端的内部节点列表将仅用这些数据节点替换,默认情况下,这个列表每5秒刷新一次。注意,嗅探器连接的IP地址是在这些节点的Elasticsearch配置中声明为发布的地址。

请记住,如果该节点不是一个数据节点,该列表可能不包括它连接到的原始节点。例如,如果您最初连接到一个主节点,在嗅探之后,没有进一步的请求将进入主节点,而是指向任何数据节点。传输客户端排除非数据节点的原因是为了避免将搜索流量发送给主节点。

为了启用嗅探,请设置client.transport.snifftrue:

Settings settings = Settings.builder()
        .put("client.transport.sniff", true).build();
TransportClient client = new PreBuiltTransportClient(settings);

其他传输客户端级别设置包括:

参数client.transport.ignore_cluster_name

描述:设置为true以忽略连接节点的集群名称验证。(自从0.19.4)

参数client.transport.ping_timeout

描述:等待节点的ping响应的时间,默认为5s。

参数client.transport.nodes_sampler_interval

描述:采样/ping节点登记和连接的频率,默认5s。

将客户端连接到仅协调的节点

您可以在本地启动一个只协调的节点,然后在应用程序中创建一个TransportClient,该客户端连接到这个只协调的节点。

通过这种方式,只需协调的节点将能够加载您需要的任何插件(例如,关于discovery插件)。

下一篇:Elasticsearch Java API 6.2(文档API)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/69699.html

相关文章

  • Elasticsearch Java API 6.2(文档API

    摘要:注意当一个文档在快照的时间和索引请求过程之间发生变化时,会发生版本冲突。当版本匹配时,更新文档并增加版本号。在正在运行的更新中,使用更改的值使用查找的值。值加快进程立即生效,减慢查询的值在完成当前批处理后生效,以防止滚动超时。 文档API 本节描述以下CRUD API: 单文档的API Index API Get API Delete API Update API 多文档API ...

    lykops 评论0 收藏0
  • Elasticsearch Java High Level REST Client(入门)

    摘要:入门本节描述从获取工件到在应用程序中使用它如何开始使用高级别客户端。保证能够与运行在相同主版本和大于或等于的次要版本上的任何节点通信。与具有相同的发布周期,将版本替换为想要的客户端版本。 Java High Level REST Client 入门 本节描述从获取工件到在应用程序中使用它如何开始使用高级别REST客户端。 兼容性 Java High Level REST Client需...

    honmaple 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<