• ElasticSearch 之 Client


    在使用ElasticSearch的时候,我们需要与Cluster通信,Java版本的API提供了几种方式来构造Client,进而通过Client操作Cluster。

     
    1)使用Node与clustor通信
    原理:通过在程序中创建一个嵌入es节点(Node),使之成为ElasticSearch集群的一部分,然后通过这个节点来与ElasticSearch集群通信。
     
    最简单的方式:

    Node node = NodeBuilder.nodeBuilder().node();

    Client client = node.client();

    配置cluster集群名称的方式:

    (1)配置文件里边配置:/src/main/resources/elasticsearch.yml  添加:cluster.name=yourclustername

    (2)代码里边设置: Node node = NodeBuilder.nodeBuilder().clusterName("yourclustername").node();

    默认的话启动一个节点,es集群会自动给它分配一些索引的分片, 此时可能会出现一些问题,例如:如果初始化Map的时候,需要分词插件,而本地又没有,就会报错。如果你想这个节点仅仅作为一个客户端而不去保存数据, 你就可以设置把node.data设置成false或node.client设置成true。如:NodeBuilder.nodeBuilder().client(true).node();    此时,就不会出现上面的错误。

    
    

    还有一种情况是你并不想把节点加入集群,只想用它进行单元测试时,就要启动一个”本地”的es,这里“本地”指的是在jvm的级别下运行,即两个不同的es节点运行在同一个JVM中时会组成一个集群。它需要把节点的local参数设置成true

    Node node = NodeBuilder.nodeBuilder().local(true).node();      ???

    2)使用TransportClient 与cluster通信
     

    Settings settings = ImmutableSettings.settingsBuilder().put("cluster.name", "xg-elasticsearch").put("client.transport.sniff", true).build();

    TransportClient transportClient = new TransportClient(settings);

    transportClient.addTransportAddress(new InetSocketTransportAddress("192.168.1.16", 9300));

    cluster.name 表示:集群的名称,默认为 elasticsearch,可以在ElasticSearch对应的目录elasticsearchconfig下的elasticsearch.yml文件中修改。

    如果设置client.transport.sniff为true,则表示客户端去嗅探整个cluster的状态,把集群中其它机器的ip地址加到客户端中,这样做的好处是一般你不用手动设置集群里所有集群的ip到连接客户端,它会自动帮你添加,并且自动发现新加入集群的机器。

    但是至少添加一个InetSocketTransportAddress,否则会出现异常:org.elasticsearch.client.transport.NoNodeAvailableException: No node
    available。这里给出了解释:https://groups.google.com/forum/#!topic/elasticsearch/TkEm068KJyo 

    意思就是至少手动添加一个节点,而 当client.transport.sniff 设置为true的时候,其做的是会把其它的在同一cluster中的其它的node添加进来。据说:同一cluster下的所有node需要在同一网段下面,待证实。


    要注意的是:客户端和集群的cluster的版本需要一致。否则会出现不兼容的问题。

    在使用过程中,不要重复构造Client对象,应该使用单例复用。
  • 相关阅读:
    [USACO15JAN]草鉴定Grass Cownoisseur (分层图,最长路,$Tarjan$)
    P1558 色板游戏 (线段树)
    [Vani有约会]雨天的尾巴 (线段树合并)
    UVA11806 Cheerleaders (容斥)
    [JSOI2007]建筑抢修 (贪心)
    [POI2015]KIN (线段树)
    [六省联考2017]组合数问题 (矩阵优化$dp$)
    [BZOJ2957] 楼房重建 (线段树,递归)
    [USACO Section 5.3]量取牛奶 Milk Measuring (动态规划,背包$dp$)
    P2647 最大收益 (动态规划)
  • 原文地址:https://www.cnblogs.com/lujiao_cs/p/3700375.html
Copyright © 2020-2023  润新知