前言
到目前为止,我们一直都是使用RESTful风格的 API操作elasticsearch服务,但是通过我们之前的学习知道,elasticsearch提供了很多语言的客户端用于操作elasticsearch服务,例如:java、python、.net、JavaScript、PHP等。而我们此次就学习如何使用java语言来操作elasticsearch服务。在elasticsearch的官网上提供了两种java语言的API,一种是Java Transport Client,一种是Java REST Client。
而Java REST Client又分为Java Low Level REST Client和Java High Level REST Client,Java High Level REST Client是在Java Low Level REST Client的基础上做了封装,使其以更加面向对象和操作更加便利的方式调用elasticsearch服务。
官方推荐使用Java High Level REST Client,因为在实际使用中,Java Transport Client在大并发的情况下会出现连接不稳定的情况。
导入依赖包
<!-- Elasticsearch核心依赖包 -->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>5.6.8</version>
</dependency>
通过Java程序连接Elasticsearch
public class ElasticSearchUtil {
Logger logger = LoggerFactory.getLogger(ElasticSearchUtil.class);
//elasticsearch 服务器地址
public final static String HOST = "192.168.40.128";
public final static int PORT = 9300; // http请求的端口是9200,客户端是9300
//集群名称,要和elasticsearch.yml 中的cluster.name 相对应
public final static String clusterName = "elasticsearch";
private TransportClient client = null;
@Before
public void getConnect() {
try {
Settings settings = Settings.builder().put("cluster.name", clusterName)// 集群名
.put("client.transport.sniff", false)// 自动把集群下的机器添加到列表中
.build();
client = new PreBuiltTransportClient(settings)
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(HOST), PORT));
System.out.println("执行befor方法");
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@After
public void closeConnect() {
try {
if (null != client) {
client.close();
}
System.out.println("执行after方法");
} catch (Exception e) {
// TODO: handle exception
}
}
//创建索引,并加入内容
@Test
public void addIndex() throws Exception {
IndexResponse response = client.prepareIndex("index_1", "type_1", "1").setSource(XContentFactory.jsonBuilder()
.startObject().field("userName", "张三").field("sendDate", new Date()).field("msg", "你好李四").endObject())
.get();
System.out.println("索引名称:" + response.getIndex() + "\n类型:" + response.getType() + "\n文档ID:" + response.getId()
+ "\n当前实例状态:" + response.status());
}
//添加
@Test
public void addContent() {
String jsonStr = "{" + "\"userName\":\"张三\"," + "\"sendDate\":\"2017-11-30\"," + "\"msg\":\"你好李四\"" + "}";
JSONObject json = new JSONObject();
json.put("userName", "li");
json.put("sendDate", "2019-09-20");
json.put("msg", "I am superMan");
IndexResponse response = client.prepareIndex("index_1", "type_1","2").setSource(json, XContentType.JSON).get();
System.out.println("json索引名称:" + response.getIndex() + "\njson类型:" + response.getType() + "\njson文档ID:"
+ response.getId() + "\n当前实例json状态:" + response.status());
}
//获取
@Test
public void getContent() {
GetResponse getResponse = client.prepareGet("index_1", "type_1", "1").get();
System.out.println(getResponse.getSource());
System.out.println("索引库的数据:" + getResponse.getSourceAsString());
}
//修改
@Test
public void updateContent() {
JSONObject json = new JSONObject();
json.put("userName", "王五");
json.put("sendDate", "2008-08-08");
json.put("msg","你好,张三,好久不见");
UpdateResponse updateResponse = client.prepareUpdate("index_1", "type_1", "1")
.setDoc(json,XContentType.JSON).get();
System.out.println("updateResponse索引名称:" + updateResponse.getIndex() + "\n updateResponse类型:" + updateResponse.getType()
+ "\n updateResponse文档ID:" + updateResponse.getId() + "\n当前实例updateResponse状态:" + updateResponse.status());
}
//删除
@Test
public void deleteContent() {
DeleteResponse deleteResponse = client.prepareDelete("idnex_1", "type_1", "1").get();
logger.info("deleteResponse索引名称:" + deleteResponse.getIndex() + "\n deleteResponse类型:" + deleteResponse.getType()
+ "\n deleteResponse文档ID:" + deleteResponse.getId() + "\n当前实例deleteResponse状态:" + deleteResponse.status());
}
}
亲测通过,新手可以直接复制测试。