У меня есть служба, которая индексирует документы. Сервис получает два следующих запроса — первый на вставку документа и второй на его удаление. Когда между ними есть какое-то время, он работает нормально, но когда они отправляются друг за другом, документ не удаляется. Ответ, который я получаю от Nest, выглядит успешным.
Моя функция довольно длинная, поэтому я буду писать только вставку и удаление внутри. Если потребуется дополнительная информация, я добавлю ее (например, в случае вставки также удаляет ее из всех других доступных индексов и при необходимости вставляет некоторое сопоставление).
Код вставки:
IBulkResponse res = await _client.IndexManyAsync(entities, index, type);
Удалить код:
var termFilter = new List<Func<QueryContainerDescriptor<JObject>, QueryContainer>>
{
c => c.Terms(t => t.Field(ID_FIELD).Terms(ids))
};
await _client.DeleteByQueryAsync<JObject>(indices, types, d => d.Query(q => q.Bool(b => b.Must(termFilter))));
Например, этот интеграционный тест не работает:
var indices = new { "some_index_1", "some_index_2" };
var entity = new Entity { Action = ReplicationAction.INSERT, ... };
await elasticDal.Insert(new List { entity }, "some_index_1", "666", indices);
entity.Action = ReplicationAction.DELETE;
await elasticDal.Insert(new List { entity }, "some_index_1", "666", indices);
Версии: ElasticSearch 2.3.5, .Net 4.6, Nest 2.4.6.