欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

elasticsearch Java API 客户端(Node Client)

程序员文章站 2022-07-05 14:23:31
...

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

  1. 在现有的一个集群中,执行index, get,  delete 和search操作;

  2. 在一个运行的集群中运行管理任务;

  3. 将elasticsearch api嵌入你的应用程序中,并进行单元或者集成测试。

想获取一个java客户端也是非常简单的,最常见的方式有:

  1. 在集群中,获取一个节点做为嵌入的节点。(比如有多个节点,使用随意一个配置到api中即可);

  2. 从节点中来请求到一个client客户端,以供程序使用。


或者你可以使用TransportClient 来连接一个集群

注意:使用java的客户端时,注意客户端的版本要和集群的版本一致。不然,如果混合着用,就可能会遇到不可预知的问题。

Node Client

实例化一个基于节点的客户端,是一种最简单的获取客户端的方式。

//静态引入
import static org.elasticsearch.node.NodeBuilder.nodeBuilder;

// main函数
public static void main(String[] args) {
        // on startup
        Node node = nodeBuilder().node();
        Client client = node.client();
        // on shutdown
        node.close();
}

此时,也许会疑问,单单这个语句,怎么知道要使用哪个集群呢?当你的java程序和你的集群在同一个局域网时。当启动一个node client时,系统会把nodeclient这个当成一个节点,加入到集群中。

首先你要在项目的/src/main/resources/路径下,添加elasticsearch.yml文件,在文件中定义cluster.name。

cluster.name: yourclustername

或者在java代码中这样写:

Node node = nodeBuilder().clusterName("yourclustername").node();
Client client = node.client();

这么做的好处是:操作会自动路由到对应的节点上去,不会产生 “double hop”(双跳)的现象。

比如:索引操作会自动在分片中执行。(此处不太理解)

当你启动一个节点时,最重要的决定是它是否应该保存数据。
换句话说,索引和分片是否被分配在这个节点上。
很多时候,我们希望客户端就单纯是客户端,没有分片在上面。
那可以通过配置来实现,将node.data设置为false,将node.client设置为true。

Node node = nodeBuilder().client(true).node();
Client client = node.client();

另一个常见的用途是:启动一个节点,然后使用客户端是进行单元或者集成测试。

在这种情况下,我们应该启动一个“local”的节点。(比如在本机中搭建一个节点)

Node node = nodeBuilder().local(true).node();
Client client = node.client();



转载于:https://my.oschina.net/claireliu/blog/464215