码迷,mamicode.com
首页 > 编程语言 > 详细

elasticsearch java操作 api

时间:2017-02-12 15:55:52      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:src   ima   asp   其他   sam   mon   用户   压力   tcl   

默认进行了elasticsearch安装和ik安装, 超时配置, 分页压力配置等

添加maven依赖

<dependency>  
            <groupId>org.elasticsearch</groupId>  
            <artifactId>elasticsearch</artifactId>  
            <version>2.4.0</version>  
        </dependency>    
        <dependency>  
            <groupId>com.fasterxml.jackson.core</groupId>  
            <artifactId>jackson-databind</artifactId>  
            <version>2.1.3</version>  
 </dependency>  

  注: 因为spring-data-elasticsearch目前只支持到2.4.0, 所以, 暂不使用5.2.0版本

    关于版本控制可见: https://github.com/spring-projects/spring-data-elasticsearch

    技术分享

 

第一部分, 使用java操作elasticsearch

  1, 创建一个node节点, 加入集群中, 通过这个node获取cilent (不建议使用)

      这种方式相当于创建了一个节点, 不存储数据, 可通过claspath下的elasticsearch.yml设置, 也可通过编程的方式配置, 

Settings settings = ImmutableSettings.settingsBuilder().put("client.transport.ping_timeout", 1000)
                .put("discovery.zen.ping.multicast.enabled", "false").put("timeout", 1)
                .putArray("discovery.zen.ping.unicast.hosts", "l-flightdev18.f.dev.cn0.qunar.com:9300", "l-flightdev17.f.dev.cn0.qunar.com:9300")
                .build();
        Node node = NodeBuilder.nodeBuilder().clusterName("flight_fuwu_order_index").client(true).settings(settings).node();
        Client client = node.client();

 

  2, 通过transportClient来连接集群

    获取了所有node节点的client, 发送请求时遍历可用的client, 

Elasticsearch为Java用户提供了两种内置客户端:
节点客户端(node client):

节点客户端以无数据节点(none data node)身份加入集群,换言之,它自己不存储任何数据,但是它知道数据在集群中的具体位置,并且能够直接转发请求到对应的节点上。
传输客户端(Transport client):

这个更轻量的传输客户端能够发送请求到远程集群。它自己不加入集群,只是简单转发请求给集群中的节点。
两个Java客户端都通过9300端口与集群交互,使用Elasticsearch传输协议(Elasticsearch Transport Protocol)。集群中的节点之间也通过9300端口进行通信。如果此端口未开放,你的节点将不能组成集群。+

TIP

Java客户端所在的Elasticsearch版本必须与集群中其他节点一致,否则,它们可能互相无法识别。

 https://www.elastic.co/guide/en/elasticsearch/client/java-api/2.4/index.html

下面介绍第二种连接方式: 

 1, 获取client连接

// 创建客户端, 使用的默认集群名, "elasticSearch"
        TransportClient client = TransportClient.builder().build()
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.50.37"), 9300));
// 通过setting对象指定集群配置信息, 配置的集群名
        Settings settings = Settings.settingsBuilder().put("cluster.name", "wenbronk_cluster") // 设置集群名
                .put("client.transport.sniff", true) // 开启嗅探
                .put("client.transport.ignore_cluster_name", true) // 忽略集群名字验证
                // .put("client.transport.ping_timeout", 5) // 报错, ping等待时间,
                // 默认5s
                // .put("client.transport.nodes_sampler_interval", 5) //报错,
                // 多久打开连接, 默认5s
                .build();
        TransportClient client = TransportClient.builder().settings(settings).build();

2, 自带json转换, 使用静态导入

import static org.elasticsearch.common.xcontent.XContentFactory.*;

XContentBuilder builder = jsonBuilder()
    .startObject()
        .field("user", "kimchy")
        .field("postDate", new Date())
        .field("message", "trying out Elasticsearch")
    .endObject()
String json = builder .string();

3, 

 

elasticsearch java操作 api

标签:src   ima   asp   其他   sam   mon   用户   压力   tcl   

原文地址:http://www.cnblogs.com/wenbronk/p/6383194.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!