文档的API操作详解
大约 3 分钟数据库技术ElasticSearch
添加文档
@Test
public void test4() throws IOException {
// 创建对象
User user = new User("狂神说", 23);
// 创建请求
IndexRequest request = new IndexRequest("bilibili");
// 规则 PUT /biliibli/_doc/1
request.id("1");
request.timeout(TimeValue.timeValueSeconds(1));
// 将数据放入请求 json
request.source(objectMapper.writeValueAsString(user), XContentType.JSON);
// 客户端发送请求,获取响应结果
IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT);
System.out.println(indexResponse.toString());
System.out.println(indexResponse.status());
}
结果:

IndexResponse[index=bilibili,type=_doc,id=1,version=1,result=created,seqNo=0,primaryTerm=1,shards={"total":2,"successful":1,"failed":0}]
CREATED
查看head界面:

判断是否存在
@Test
public void test5() throws IOException {
GetRequest request = new GetRequest("bilibili", "1");
// 不获取返回的_source的上下文
request.fetchSourceContext(new FetchSourceContext(false));
request.storedFields("_none_");
boolean exists = client.exists(request, RequestOptions.DEFAULT);
System.out.println(exists);
}

获得文档的信息
@Test
public void test6() throws IOException {
GetRequest request = new GetRequest("bilibili", "1");
GetResponse response = client.get(request, RequestOptions.DEFAULT);
System.out.println(response);
System.out.println(response.getSourceAsString());
}
结果:
{"_index":"bilibili","_type":"_doc","_id":"1","_version":1,"_seq_no":0,"_primary_term":1,"found":true,"_source":{"name":"狂神说","age":23}}
{"name":"狂神说","age":23}
更新文档
@Test
public void test7() throws IOException {
UpdateRequest request = new UpdateRequest("bilibili", "1");
request.timeout("1s");
User user = new User("狂神说Java", 18);
request.doc(objectMapper.writeValueAsString(user),XContentType.JSON);
UpdateResponse response = client.update(request, RequestOptions.DEFAULT);
System.out.println(response);
System.out.println(response.status());
}
结果:
UpdateResponse[index=bilibili,type=_doc,id=1,version=2,seqNo=1,primaryTerm=1,result=updated,shards=ShardInfo{total=2, successful=1, failures=[]}]
OK
删除文档
@Test
public void test8() throws IOException {
DeleteRequest request = new DeleteRequest("bilibili", "1");
request.timeout("1s");
DeleteResponse response = client.delete(request, RequestOptions.DEFAULT);
System.out.println(response);
System.out.println(response.status());
}
结果:
DeleteResponse[index=bilibili,type=_doc,id=1,version=3,result=deleted,shards=ShardInfo{total=2, successful=1, failures=[]}]
OK
批量插入
Test
public void test9() throws IOException {
BulkRequest bulkRequest = new BulkRequest();
bulkRequest.timeout("10s");
ArrayList<User> userList = new ArrayList<>();
userList.add(new User("狂神1", 3));
userList.add(new User("狂神2", 4));
userList.add(new User("狂神3", 5));
userList.add(new User("狂神4", 6));
userList.add(new User("狂神5", 7));
userList.add(new User("狂神6", 8));
// 批处理请求
for (int i = 0; i < userList.size(); i++) {
bulkRequest.add(
new IndexRequest("bilibili")
.id(""+(i+1))
.source(objectMapper.writeValueAsString(userList.get(i)),XContentType.JSON));
}
BulkResponse responses = client.bulk(bulkRequest, RequestOptions.DEFAULT);
System.out.println(responses);
System.out.println(responses.hasFailures());
}

查看head页面:

使用默认id:
@Test
public void test9() throws IOException {
BulkRequest bulkRequest = new BulkRequest();
bulkRequest.timeout("10s");
ArrayList<User> userList = new ArrayList<>();
userList.add(new User("狂神1", 3));
userList.add(new User("狂神2", 4));
userList.add(new User("狂神3", 5));
userList.add(new User("狂神4", 6));
userList.add(new User("狂神5", 7));
userList.add(new User("狂神6", 8));
// 批处理请求
for (int i = 0; i < userList.size(); i++) {
bulkRequest.add(
new IndexRequest("bilibili")
.source(objectMapper.writeValueAsString(userList.get(i)),XContentType.JSON));
}
BulkResponse responses = client.bulk(bulkRequest, RequestOptions.DEFAULT);
System.out.println(responses);
System.out.println(responses.hasFailures());
}

查看head页面:

查询
- 搜索请求 SearchRequest
- 条件构造 SearchSourceBuilder
- 构建高亮 HighlightBuilder
- 精确查询 TermQueryBuilder
- xxxBuilder 对应所有的命令
@Test
public void test10() throws IOException {
SearchRequest searchRequest = new SearchRequest("bilibili");
// 构建搜索条件
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
// 查询条件
TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("age", "3");
sourceBuilder.query(termQueryBuilder);
sourceBuilder.timeout(TimeValue.timeValueSeconds(10));
searchRequest.source(sourceBuilder);
SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
System.out.println(objectMapper.writeValueAsString(response.getHits()));
for (SearchHit hit : response.getHits().getHits()) {
System.out.println(hit.getSourceAsMap());
}
}
结果:
{"hits":[{"score":1.0,"id":"1","type":"_doc","nestedIdentity":null,"version":-1,"seqNo":-2,"primaryTerm":0,"fields":{},"highlightFields":{},"sortValues":[],"matchedQueries":[],"explanation":null,"shard":null,"index":"bilibili","clusterAlias":null,"sourceAsMap":{"name":"狂神1","age":3},"innerHits":null,"sourceAsString":"{\"name\":\"狂神1\",\"age\":3}","sourceRef":{"fragment":true},"rawSortValues":[],"fragment":false},{"score":1.0,"id":"c3HPSXgBIt3vl1fuXqZ0","type":"_doc","nestedIdentity":null,"version":-1,"seqNo":-2,"primaryTerm":0,"fields":{},"highlightFields":{},"sortValues":[],"matchedQueries":[],"explanation":null,"shard":null,"index":"bilibili","clusterAlias":null,"sourceAsMap":{"name":"狂神1","age":3},"innerHits":null,"sourceAsString":"{\"name\":\"狂神1\",\"age\":3}","sourceRef":{"fragment":true},"rawSortValues":[],"fragment":false}],"totalHits":{"value":2,"relation":"EQUAL_TO"},"maxScore":1.0,"sortFields":null,"collapseField":null,"collapseValues":null,"fragment":true}
{name=狂神1, age=3}
{name=狂神1, age=3}
