Elasticsearch官方推荐使用Java REST客户端连接集群并进行数据操作。Java REST client有两种:一种是Java Low Level REST Client, 使用该客户端需要将http请求的body手动拼成json格式,http响应也必须将返回的json数据手动封装成对象;另外一种是Java High Level REST Client, 该客户端基于低级客户端实现,提供API解决低级客户端需要手动转换数据格式的问题。
使用Java High Level REST Client访问集群,示例步骤与代码如下:
1 添加maven依赖
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>5.6.11</version>
</dependency>
2 实战代码
import org.apache.http.HttpHost;
import org.apache.log4j.Logger;
import org.elasticsearch.ElasticsearchException;
import org.elasticsearch.action.DocWriteResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.rest.RestStatus;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* Created with IntelliJ IDEA.
* Description:
* User: bellengao, bellengao@tencent.com
* Date: 2018-08-27
* Time: 下午6:00
*/
public class TestHighLevelRestClient {
private static Logger logger = Logger.getLogger(TestHighLevelRestClient.class);
public static void main(String[]args){
// 初始化RestClient, hostName和port填写集群的内网vip地址与端口
RestClientBuilder builder = RestClient.builder(new HttpHost("localhost", 9200, "http"));
// 设置超时时间
builder.setMaxRetryTimeoutMillis(10000);
RestClient restClient = builder.build();
// 由Low Level Client构造High Level Client
RestHighLevelClient client = new RestHighLevelClient(restClient);
// 索引文档
Map<String, Object> jsonMap = new HashMap<String, Object>();
jsonMap.put("user", "bellen");
jsonMap.put("name", new Date());
jsonMap.put("message", "trying out Elasticsearch");
IndexRequest indexRequest = new IndexRequest("posts", "doc", "1")
.source(jsonMap);
try {
// 获取响应结果
IndexResponse indexResponse = client.index(indexRequest);
String index = indexResponse.getIndex();
String type = indexResponse.getType();
String id = indexResponse.getId();
long version = indexResponse.getVersion();
if (indexResponse.getResult() == DocWriteResponse.Result.CREATED) {
logger.info("doc indexed, index: "+ index +", type:"+ type +",id:"+ id+",version:"+version);
} else if (indexResponse.getResult() == DocWriteResponse.Result.UPDATED) {
logger.info("doc updated, index: "+ index +", type:"+ type +",id:"+ id+",version:"+version);
}
}catch(ElasticsearchException e) {
if (e.status() == RestStatus.CONFLICT) {
logger.error("version conflict");
}
}catch(Exception e){
logger.error("execute index api failed, "+ e.toString());
}
// 查询文档
GetRequest getRequest = new GetRequest(
"posts",
"doc",
"1");
try {
// 获取响应结果
GetResponse getResponse = client.get(getRequest);
String index = getResponse.getIndex();
String type = getResponse.getType();
String id = getResponse.getId();
if (getResponse.isExists()) {
long version = getResponse.getVersion();
String sourceAsString = getResponse.getSourceAsString();
logger.info("get doc, index: "+ index +", type:"+ type +",id:"+ id+",version:"+version +", source:"+ sourceAsString);
}
}catch (ElasticsearchException e) {
if (e.status() == RestStatus.NOT_FOUND) {
logger.warn("doc not found");
}
}
catch(Exception e){
logger.error("execute get api failed, "+ e.toString());
}
// 关闭客户端
try {
restClient.close();
}catch (Exception e){
logger.error("close rest client exception:"+ e.toString());
}
}
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。