我正在使用C#
上的Elasticsearch(ES)5和NEST 5我使用ES实现了工作流程。简化工作流程有两个步骤。
步骤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来解决这个问题......
任何帮助将不胜感激
答案 0 :(得分:0)
如果你分两步完成,那么你应该这样做
var result = ...
.Index(allIndexesStr)
// Exclude all contact in this list
.Query(q =>
...
)
.WaitForCompletion(true)
// Update script
.Script(script => script
.Inline(scriptStr)
.Params(p =>
...
)
)
.Refresh(true)
.Routing(customerSiteId.ToString());
if (result.IsValid)
{
search
.Index(allIndexesStr)
.Size(size)
.Scroll(timeout)
.Query(q =>
...
)
.Sort(sort => sort
.Ascending("contactGuid.keyword")
)
.Routing(customerSiteId.ToString());
}