分布式搜索ElasticSearch构建集群与简单搜索实例应

关于ElasticSearch不介绍了,直接说应用。分布式ElasticSearch集群构建的方法.


1.通过在程序中创建一个嵌入es节点(Node),使之成为es集群的一部分,然后通过这个节点来与es集群通信.

/**在运行该测试实例时,已经在本地建立了对应的索引库datum*/
    public static void main(String[] args) {
       
        //当你启动一个节点,它会自动加入同网段的es集群,一个前提就是es的集群名(cluster.name)这个参数要设置一致。
        String clusterName = "elasticsearch_pudp"; //集群结点名称
       
        /**
        * 默认的话启动一个节点,es集群会自动给它分配一些索引的分片,如果你想这个节点仅仅作为一个客户端而不去保存数据,
        * 你就可以设置把node.data设置成false或 node.client设置成true。
        */
        Node node = NodeBuilder.nodeBuilder().clusterName(clusterName).client(true).node();
       
        //启动结点,加入到指定集群
        node.start();
       
        //获取节点搜索端,使用prepareGet搜索datum索引库中 索引类型为datum,的索引记录唯一id值为150得记录
        GetResponse response = node.client().prepareGet("datum", "datum", ""+150).execute().actionGet();
       
        //对象映射模型
        ObjectMapper mapper = new ObjectMapper();
        //将搜索结果response中的值转换成指定的对象模型,Datum是自己建立的一个咨询Model对象
        Datum datum= mapper.convertValue(response.getSource(), Datum.class);
       
        //打印检索结果中获取的对象相应的属性
        System.out.println("资讯标题:"+datum.getTitle() );
       
        //关闭结点
        node.close();
    }

程序运行结果:

资讯标题:波立维与泰嘉片哪个治疗血栓病效果更好呢

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

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

2.用TransportClient这个接口和es集群通信.

集群中绑定结点

通过TransportClient这个接口,我们可以不启动节点就可以和es集群进行通信,它需要指定es集群中其中一台或多台机的ip地址和端口

Client client = new TransportClient()
        .addTransportAddress(new InetSocketTransportAddress("192.168.0.149", 9300))
        .addTransportAddress(new InetSocketTransportAddress("192.168.0.162", 9300));
   
        client.close();   

集群名称如果我们不更改,默认的为elasticsearch,在ElasticSearch对应的目录elasticsearch\config\下的elasticsearch.yml文件中.如下位置

################################### Cluster ###################################

# Cluster name identifies your cluster for auto-discovery. If you're running
# multiple clusters on the same network, make sure you're using unique names.
#
cluster.name: elasticsearch

程序中自定义集群结点名称

/**在运行该测试实例时,已经在本地建立了对应的索引库datum*/
    public static void main(String[] args) {
       
        //自定义集群结点名称
        String clusterName = "elasticsearch_pudongping";
       
        //程序中更改集群结点名称
        Settings settings = ImmutableSettings.settingsBuilder()
        .put("cluster.name", clusterName).build();
       
        //创建集群,绑定集群内的机器
        TransportClient client = new TransportClient(settings);
        client.addTransportAddress(new InetSocketTransportAddress("192.168.0.149", 9300));
        client.addTransportAddress(new InetSocketTransportAddress("192.168.0.162", 9300));
       
        //搜索
        GetResponse response = client.prepareGet("datum", "datum", ""+130)
          .execute()
          .actionGet();
       
        ObjectMapper mapper = new ObjectMapper();
        Datum datum= mapper.convertValue(response.getSource(), Datum.class);
       
        System.out.println("资讯标题:"+datum.getTitle() );
       
        //关闭结点
        client.close();   
    }

程序运行结果

资讯标题:捷诺维主要成份有哪些 疗效怎么样

设置属性使客户端去嗅探整个集群的状态

可以设置client.transport.sniff为true来使客户端去嗅探整个集群的状态 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/0958679ee1f6f2e851611f5fac23046a.html