2017-02-21 16 views
0

Когда я выполняю индексный вызов, существует ли способ сделать сбой вызова, если документ с тем же идентификатором уже существует?ElasticSearch C# NEST - Как предотвратить переписывание документа

Я вижу предупреждения, но исходный документ все еще перезаписан.

+0

было бы очень полезно прокомментировать нижестоящее, чтобы я знал, что не так с вопросом. – Thomas

ответ

1

Вы можете достичь этого, используя _create конечную точку, или указав OpType.Create при индексировании документа

var client = new ElasticClient(); 

// using OpType.Create 
client.Index(new Test { Id = 1, Message = "message 1" }, i => i 
    .OpType(OpType.Create) 
); 

// using _create endpoint 
client.Create(new Test { Id = 1, Message = "message 1" }); 

Если документ уже существует, то ответ Конфликт HTTP 409 будет возвращен. В обоих случаях вам нужен идентификатор документа, который вы индексируете/создаете.

+0

Есть ли что-то подобное для IndexMany, где он пропустит уже существующие документы? – Thomas

+0

Не пропустите, но верните 409, да. 'IndexMany' - это просто удобство в API' _bulk', который предоставляет, есть операции «Массовое создание, обновление, индексирование и удаление». Просмотрите тесты Bulk API для различных примеров работы: https://github.com/elastic/elasticsearch-net/blob/5.x/src/Tests/Document/Multiple/Bulk/BulkApiTests.cs#L74-L89 –