Я работаю с Elasticsearch (ES) 5 и NEST 5 на C #
У меня есть рабочий процесс, реализованный с использованием ES. Упрощение рабочего процесса состоит из 2 шагов.
Шаг 1: Я генерирую получателей для сообщения с использованием оператора UpdateByQuery на основе некоторых критериев.
Шаг 2: Я запрашиваю всех получателей, сгенерированных на шаге 1, для фактической доставки сообщения.
Проблема, с которой я сталкиваюсь, заключается в том, что иногда первый шаг выполняется так быстро, что при запуске второго шага индекс еще не обновляется, поэтому получатель не обнаруживается.
Я попытался установить «WaitForCompletion (true)» (по умолчанию для Nest), но я получил тот же результат. Также я заметил, что UpdateByQuery не поддерживает refresh = wait_for, поэтому не уверен, как это сделать.
Мое обновление по запросу выглядит так:
query
.Index(allIndexesStr)
// Exclude all contact in this list
.Query(q =>
...
)
.WaitForCompletion(true)
// Update script
.Script(script => script
.Inline(scriptStr)
.Params(p =>
...
)
)
.Routing(customerSiteId.ToString());
Мой поиск выглядит так:
search
.Index(allIndexesStr)
.Size(size)
.Scroll(timeout)
.Query(q =>
...
)
.Sort(sort => sort
.Ascending("contactGuid.keyword")
)
.Routing(customerSiteId.ToString());
Так что мне интересно, как лучше решить эту проблему с помощью ES ...
Любая помощь будет признательна