首先我们对上一篇的代码进行优化、创建客户端连接工具
import java.net.InetAddress;
import java.net.UnknownHostException;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
public class ESTools {
public static final String HOST = "127.0.0.1";
public static final Integer PORT = 9300;
public static final String CONF = "cluster.name";
public static final String NAME = "xxxxxxxx";
@SuppressWarnings("resource")
public static TransportClient getTransportClient() throws UnknownHostException {
Settings settings = Settings.builder().put(CONF, NAME).build();
return new PreBuiltTransportClient(settings)
.addTransportAddress(new TransportAddress(InetAddress.getByName(HOST),PORT));
}
}
1、根据ID检索文档
import java.net.UnknownHostException;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.junit.Test;
public class EsDemo {
@Test
public void test1() throws UnknownHostException{
TransportClient client = ESTools.getTransportClient();
GetResponse response = client.prepareGet("book", "doc", "1").execute().actionGet();
System.out.println(response.getSourceAsString());
client.close();
}
}
2、添加文档
@Test
public void test2() throws Exception {
TransportClient client = ESTools.getTransportClient();
XContentBuilder docment = XContentFactory.jsonBuilder().startObject()
.field("description", "零基础开发实战课程")
.field("name", "spring开发")
.field("studymodel", 2019).endObject();
IndexResponse response = client.prepareIndex("book", "doc", "2").setSource(docment).get();
System.out.println(response);
client.close();
}
@Test
public void test11() throws Exception {
TransportClient client = ESTools.getTransportClient();
Map<String, Object> jsonMap = new HashMap<>();
jsonMap.put("name", "spring cloud实战");
jsonMap.put("description", "本课程主要从四个章节进行讲解: 1.微服务架构入门 2.spring cloud基础入门 3.实战Spring Boot 4.注册中心eureka。");
jsonMap.put("studymodel", "2020");
IndexResponse response = client.prepareIndex("book", "doc", "5").setSource(jsonMap).get();
DocWriteResponse.Result result = response.getResult();
System.out.println(result);
client.close();
}
当然还有JSONObject提交的方式,JSON字符串拼接属性提交方式,方法很多,总之添加文档对象数据必须是JSON格式
3、修改文档
@Test
public void test3() throws Exception {
TransportClient client = ESTools.getTransportClient();
UpdateRequest updateRequest = new UpdateRequest();
updateRequest.index("book").type("doc").id("2")
.doc(XContentFactory.jsonBuilder().startObject()
.field("name", "spring开发框架")
.field("studymodel", 2018)
.endObject()
);
UpdateResponse updateResponse = client.update(updateRequest).get();
System.out.println(updateResponse);
client.close();
}
4、删除文档
@Test
public void test4() throws Exception {
TransportClient client = ESTools.getTransportClient();
DeleteResponse response = client.prepareDelete("book", "doc", "2").get();
System.out.println(response);
client.close();
}
5、更新的文档存在则更新,若不存在则添加
@Test
public void test5() throws Exception {
TransportClient client = ESTools.getTransportClient();
XContentBuilder builder = XContentFactory.jsonBuilder().startObject()
.field("description", "零基础开发实战课程")
.field("name", "spring开发框架")
.field("studymodel", 2018).endObject();
IndexRequest addRequest = new IndexRequest("book", "doc", "2")
.source(builder);
UpdateRequest request = new UpdateRequest("book", "doc", "2")
.doc(XContentFactory.jsonBuilder().startObject()
.field("name", "spring").endObject()
).upsert(builder);
UpdateResponse response = client.update(request).get();
System.out.println(response);
client.close();
}
6、根据id批量查询
@Test
public void test6() throws Exception {
TransportClient client = ESTools.getTransportClient();
MultiGetResponse mResponse = client.prepareMultiGet()
.add("book", "doc", "1")
.add("book", "doc", "2").get();
for (MultiGetItemResponse response : mResponse) {
System.out.println(response.getResponse());
}
client.close();
}
7、批量增加文档
@Test
public void test7() throws Exception {
TransportClient client = ESTools.getTransportClient();
BulkRequestBuilder requestBuilder = client.prepareBulk();
requestBuilder.add(client.prepareIndex("book","doc","3")
.setSource(XContentFactory.jsonBuilder().startObject()
.field("description", "java零基础开发实战课程")
.field("name", "java实战")
.field("studymodel", 2020).endObject()));
requestBuilder.add(client.prepareIndex("book","doc","4")
.setSource(XContentFactory.jsonBuilder().startObject()
.field("description", "java001零基础开发实战课程")
.field("name", "java实战001")
.field("studymodel", 2020).endObject()));
BulkResponse bulkItemResponses = requestBuilder.get();
System.out.println(bulkItemResponses.status());
client.close();
}
8、查询某个索引下面的所有文档
@Test
public void test8() throws Exception {
TransportClient client = ESTools.getTransportClient();
QueryBuilder queryBuilder = QueryBuilders.matchAllQuery();
SearchResponse resp = client.prepareSearch("book").setQuery(queryBuilder).get();
System.out.println(resp);
client.close();
}