elastic java client_Elasticsearch Java API 6.2(java client)

前言

本节描述了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 client的javadoc可以在这里找到:https://artifacts.elastic.co/...。

Maven存储库

Elasticsearch驻留在

例如,您可以在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.sniff为true:

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插件)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值