Elasticsearch: индекс json с указанным _id - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть большой файл с JSON-объектом в каждой строке.Одна строка выглядела бы примерно так:

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

Я очень хорошо знаю, что я мог бы просто переименовать _id, например, в primary_key, и я не столкнулся бы с проблемой, но все жеЯ хотел бы знать, могу ли я использовать идентификатор, рассчитанный для моего объекта в поле ES * _id.

Следующий пример кода завершается ошибкой, запрещено указывать мета-поле _id вСам объект JSON.

Помимо решения по переименованию в предыдущем абзаце, я мог бы также указать _id вручную в IndexRequestBuilder.Но мой файл содержит более полумиллиона строк, и я не желаю снижать производительность при анализе JSON для извлечения идентификатора из него.

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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...