Elasticsearch:提供_id的批量索引json

时间:2019-02-20 17:58:20

标签: java elasticsearch

我有一个大文件,每行都有一个JSON对象。一行看起来像这样:

{"_id":0, "foreign_key":-1, "text":"foobar"}

我非常清楚,我可以将_id重命名为primary_key,但我不会遇到问题,但是我仍然想知道是否可以使用我在ES的_id字段中为对象计算的ID。

以下示例代码失败,不允许在JSON对象本身中指定元字段_id

除了上一段中的重命名解决方案外,我还可以在_id中手动指定IndexRequestBuilder。但是我的文件包含了超过一百万行,并且在解析JSON以从中提取ID时,我不愿意放弃性能。

private void indexAll() {
    TransportClient client + ... // setup omitted for brevity
    BulkRequestBuilder bulkRequest = client.prepareBulk();

    try (Stream<String> stream = Files.list(myFile)) {
        stream.forEach(l -> addRequest(bulkRequest, client, l));
    }

    BulkResponse bulkResponse = bulkRequest.get();
    if (bulkResponse.hasFailures()) {
        // error handling
    }
}

private void addRequest(BulkRequest bulk, TransportClient client, String line) {
    IndexRequestBuilder req = client.prepareIndex("myIndex", "_doc"):
    req.setSource(line, XContentType.JSON);
    bulk.add(req);
}

是否有一种方法可以按照给定的JSON对象编制索引并使用其_id

0 个答案:

没有答案