文档的API操作详解

HeJin大约 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());
}

结果:

image-20210319164122736
image-20210319164122736
IndexResponse[index=bilibili,type=_doc,id=1,version=1,result=created,seqNo=0,primaryTerm=1,shards={"total":2,"successful":1,"failed":0}]
CREATED

查看head界面:

image-20210319164217562
image-20210319164217562

判断是否存在

@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);
}
image-20210319170002742
image-20210319170002742

获得文档的信息

@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());
}
image-20210319172448048
image-20210319172448048

查看head页面:

image-20210319172527180
image-20210319172527180

使用默认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());
}
image-20210319172727591
image-20210319172727591

查看head页面:

image-20210319172754446
image-20210319172754446

查询

  • 搜索请求 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}
image-20210319174254899
image-20210319174254899