本章内容概述
1、在Java应用中实现查询文档
2、在Java应用中实现添加文档
3、在Java应用中实现删除文档
4、在Java应用中实现更新文档
1、在Java应用中实现查询文档
1、创建SpringBoot工程
2、创建工程的时候,勾选需要的依赖
3、在src/test/demo下面的com.example.demo下面的ElasticSearchTestApplicationTests.java中写测试程序
根据id查询指定数据
//从ES中查询数据
@Test
public void query() throws UnknownHostException {
//指定ES集群
Settings settings = Settings.builder().put("cluster.name", "myes").build();
//创建访问es服务器的客户端
TransportClient client = new PreBuiltTransportClient(settings).
addTransportAddress(new TransportAddress(
InetAddress.getByName("192.168.34.64"),9300));
//数据查询 GET /lib3/user/1
GetResponse response = client.prepareGet("lib3", "user", "1").execute().actionGet();
//从response得到查询的数据
System.out.println(response.getSourceAsString()); //得到json格式
//关闭客户端
client.close();
}
查询结果如下:
2、在Java应用中实现添加文档
向索引中添加一条数据
//向ES添加数据
@Test
public void add() throws IOException {
//指定ES集群
Settings settings = Settings.builder().put("cluster.name", "myes").build();
//创建访问es服务器的客户端
TransportClient client = new PreBuiltTransportClient(settings).
addTransportAddress(new TransportAddress(
InetAddress.getByName("192.168.34.64"),9300));
//添加数据
/**
* ElasticSearch里面的写法:
* PUT /lib3/user/1
{
"name":"赵六",
"address":"黑龙江省铁岭市",
"age":50,
"birthday":"1970-12-12",
"interests":"喜欢喝酒,锻炼,说相声"
}
*/
XContentBuilder doc = XContentFactory.jsonBuilder()
.startObject()
.field("name", "尼古拉斯")
.field("address", "英国伦敦")
.field("age", 12)
.field("birthday", "1970-12-12")
.field("interests", "喜欢喝酒,跑步,拍电影")
.endObject();
//添加文档
IndexResponse response = client.prepareIndex("lib3", "user", "11")
.setSource(doc).get();
//判断是否成功:如果返回值是CREATED,表示成功
System.out.println(response.status());
}
3、在Java应用中实现删除文档
根据id删除指定数据
//从ES中删除指定文档
@Test
public void delete() throws UnknownHostException {
//指定ES集群
Settings settings = Settings.builder().put("cluster.name", "myes").build();
//创建访问es服务器的客户端
TransportClient client = new PreBuiltTransportClient(settings).
addTransportAddress(new TransportAddress(
InetAddress.getByName("192.168.34.64"),9300));
//删除文档
DeleteResponse response = client.prepareDelete("lib3", "user", "1").get();
//判断是否成功,如果返回值是OK,表示删除成功
System.out.println(response.status());
}
4、在Java应用中实现更新文档
根据id修改指定数据
//更新ES中的文档
@Test
public void update() throws IOException, InterruptedException, ExecutionException {
//指定ES集群
Settings settings = Settings.builder().put("cluster.name", "myes").build();
//创建访问es服务器的客户端
TransportClient client = new PreBuiltTransportClient(settings).
addTransportAddress(new TransportAddress(
InetAddress.getByName("192.168.34.64"),9300));
//更新文档
UpdateRequest request = new UpdateRequest();
request.index("lib3")
.type("user")
.id("11")
.doc(
XContentFactory.jsonBuilder().startObject()
.field("name","尼古拉赵四")
.endObject()
);
UpdateResponse response = client.update(request).get();
//获取更新状态,如果是OK,表示成功
System.out.println(response.status());
}
upsert更新方式
//更新ES中的文档:upsert方式:如果文档存在,更新;如果文档不存在,添加
@Test
public void upsert() throws IOException, InterruptedException, ExecutionException {
//指定ES集群
Settings settings = Settings.builder().put("cluster.name", "myes").build();
//创建访问es服务器的客户端
TransportClient client = new PreBuiltTransportClient(settings).
addTransportAddress(new TransportAddress(
InetAddress.getByName("192.168.34.64"),9300));
//大致意思:如果执行更新操作,没有该文档,那么去执行某个添加
//所以我们需要有一个添加和一个更新
//因为添加和更新相当于一个同步操作,所以我们进行添加和更新的时候,就需要换种方式写
//添加文档
IndexRequest request1 = new IndexRequest("lib3", "user", "15")
.source(
XContentFactory.jsonBuilder()
.startObject()
.field("name", "美国队长")
.field("address", "美国")
.field("age", 38)
.field("birthday", "1980-10-12")
.field("interests", "喜欢滑翔,跑步,喝酒")
.endObject()
);
UpdateRequest request2 = new UpdateRequest("lib3", "user", "15")
.doc(
XContentFactory.jsonBuilder().startObject()
.field("name","超级英雄美国对象")
.endObject()
).upsert(request1);
UpdateResponse response = client.update(request2).get();
//获取更新状态,如果是OK,表示成功
System.out.println(response.status());
}
")
.endObject()
).upsert(request1);
UpdateResponse response = client.update(request2).get();
//获取更新状态,如果是OK,表示成功
System.out.println(response.status());
}