Elasticsearch Document Bulk API详解、原理与示例
发布日期:2021-04-30 21:12:19 浏览次数:113 分类:精选文章

本文共 3390 字,大约阅读时间需要 11 分钟。

Elasticsearch Bulk API??

Bulk API?Elasticsearch?????????????????????API???????????????????????????????????????????????????????

BulkRequest??

BulkRequest ???Bulk API???????????????????????

????

  • requests?List???????????????? IndexRequest?UpdateRequest ? DeleteRequest ????
  • indices?Set?????????????
  • payloads?String??????????????????6.4??????????????????????????? DocWriteRequest ???
  • timeout?TimeValue???????????????
  • waitForActiveShards?ActiveShardCount?????????????????????????
  • refreshPolicy?RefreshPolicy????????????
  • sizeInBytes?long???????????????
  • ????

    ?? add ??? BulkRequest ???????????????????

    Bulk API????

    Bulk API??????? JSON??????????

    ????

  • HTTP???POST
  • Content-Type?application/x-ndjson
  • ??????????????????? \r\n?
  • ???+??????????????????????????????????
  • ????

    { "opType" : { ... } }
    { "meta" : { ... } }
    { "payload" : { ... } }

    ?????

    ??????????????

    • _index?????
    • _type?????
    • _id???ID
    • routing????
    • parent????ID
    • version??????
    • version_type?????

    ???????

  • index ? create
    • pipeline????????????
  • update
    • retry_on_conflict????????
    • _source?????????
  • delete
    • ????????
  • ??????

  • index ? create??????? _source ?????
  • update???????? partial doc?upsert ? script?
  • delete?????????
  • Bulk API????

    ????

    ????????????????????????????

    ??

    ???????????????????

    ??????

    ???? BulkRequest#waitForActiveShards ??????????????????????????

    Bulk API??

    ????? Bulk API ?????????????

    public static final void testBulk() {
    RestHighLevelClient client = EsClient.getClient();
    try {
    IndexRequest indexRequest = new IndexRequest("twitter", "_doc", "12")
    .source(buildTwitter("dingw", "2009-11-18T14:12:12", "test bulk"));
    UpdateRequest updateRequest = new UpdateRequest("twitter", "_doc", "11")
    .doc(new IndexRequest("twitter", "_doc", "11"))
    .source(buildTwitter("dingw", "2009-11-18T14:12:12", "test bulk update"));
    BulkRequest request = new BulkRequest();
    request.add(indexRequest);
    request.add(updateRequest);
    BulkResponse bulkResponse = client.bulk(request, RequestOptions.DEFAULT);
    for (BulkItemResponse bulkItemResponse : bulkResponse) {
    if (bulkItemResponse.isFailed()) {
    BulkItemResponse.Failure failure = bulkItemResponse.getFailure();
    System.out.println(failure);
    continue;
    }
    DocWriteResponse itemResponse = bulkItemResponse.getResponse();
    if (bulkItemResponse.getOpType() == DocWriteRequest.OpType.INDEX ||
    bulkItemResponse.getOpType() == DocWriteRequest.OpType.CREATE) {
    IndexResponse indexResponse = (IndexResponse) itemResponse;
    System.out.println(indexRequest);
    } else if (bulkItemResponse.getOpType() == DocWriteRequest.OpType.UPDATE) {
    UpdateResponse updateResponse = (UpdateResponse) itemResponse;
    System.out.println(updateRequest);
    } else if (bulkItemResponse.getOpType() == DocWriteRequest.OpType.DELETE) {
    DeleteResponse deleteResponse = (DeleteResponse) itemResponse;
    System.out.println(deleteResponse);
    }
    }
    } catch (Exception e) {
    e.printStackTrace();
    } finally {
    EsClient.close(client);
    }
    }

    ??

    ???????????????? Bulk API ????????????Bulk API ? Elasticsearch ?????????????????????????????????????????

    上一篇:ArrayList中删除重复的字符串元素——ArrayList中删除重复的自定义对象元素
    下一篇:Java项目能力+基础能力文章精选50篇

    发表评论

    最新留言

    关注你微信了!
    [***.104.42.241]2026年05月27日 17时26分16秒