1 介绍
es在提供了java client API之后,又提供了java 的restful API操作。该API不与对应的es版本直接关联,即API版本是5.3,但是可以直接与es2.3的版本进行交互。因为java client API只是封装了HTTP操作,通过http协议与ES交互。
官网列举特点:
- 最小的包依赖
- 在所有节点上达到负载均衡
- 在节点故障和特定响应代码的情况下进行故障转移
- 连接失败惩罚:失败尝试越多,客户端等待时间越长。
- 等
2 引入
要求jdk1.7+。
官网地址
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>rest</artifactId>
<version>5.4.0</version>
</dependency>
3 初始化
RestClient是请求http的客户端,是线程安全。
RestClient restClient = RestClient.builder(
new HttpHost("localhost", 9200, "http"),
new HttpHost("localhost", 9201, "http")).build();
关闭:
restCliet.close()
4 执行请求
初始化RestClient后,可以调用其
performRequest和performRequestAsync执行同步和异步的方法。具体可参考,这里只给出一个简单sample
创建索引:
HttpEntity entity = new NStringEntity(
"{\n" +
" \"company\" : \"qbox\",\n" +
" \"title\" : \"Elasticsearch rest client\"\n" +
"}", ContentType.APPLICATION_JSON);
Response indexResponse = restClient.performRequest("PUT","/blog/post/1",Collections.<String, String>emptyMap(),entity);
System.out.println(EntityUtils.toString(indexResponse.getEntity()));
5 读取请求
Response response = restClient.performRequest("GET", "/",
Collections.singletonMap("pretty", "true"));
System.out.println(EntityUtils.toString(response.getEntity()));
//index a document
HttpEntity entity = new NStringEntity(
"{\n" +
" \"user\" : \"kimchy\",\n" +
" \"post_date\" : \"2009-11-15T14:12:12\",\n" +
" \"message\" : \"trying out Elasticsearch\"\n" +
"}", ContentType.APPLICATION_JSON);
Response indexResponse = restClient.performRequest(
"PUT",
"/twitter/tweet/1",
Collections.<String, String>emptyMap(),
entity);
6 项目参考
实际使用过程中可以参考如下两个项目
https://github.com/luminis-ams/elastic-rest-spring-wrapper/
https://github.com/jettro/elasticclientdemo
1