У меня есть большой файл с 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
?