Elasticsearch.net - NEST Scroll 不断返回相同的结果

Elasticsearch.net - NEST Scroll keeps returning the same results

我试图理解为什么 elasticsearch.net NEST 滚动调用总是返回相同的结果。我的 C# 应用程序中有一个外部循环,用于跟踪当前页面并将其与批处理大小一起传入。我简化了代码:

List<int> ids = GetIds();
int count = _batchSize;
int currentPage = 0;

while (count == _batchSize)
{
    var results = Execute(client => client.Search<Invoice>(s => s
                .Index(indexName)
                .Query(q => q
                .Terms(n => n
                .Field(f => f.Items.FirstOrDefault().MyInformation.FirstOrDefault().ItemID)
                .Terms(ids)))
                .Size(batchSize)
                .From(currentPage * batchSize)
                .Scroll("1m")
           ));

    DoSomethingWithResults();
    count = results.Count();
    currentPage++;
}

在上面的调用中,id 列表是嵌套元素的 id,它们与包含在其中的对象具有一对多的关系。这就是我想使用 scroll 的原因,因为我不知道将返回多少 Invoice 对象。每次调用时,currentPage 都会增加 1。我曾假设会返回滚动中的下一批。

我认为我做错了什么,因为我将其视为更多的寻呼流程。

这不是 Scroll API 的工作方式。

  1. 第一个请求是.Search<T>()(或SearchAsync<T>()),指定.Scroll()时间。响应将包含第一组文档
  2. 后续请求是.Scroll<T>(或ScrollAsync<T>()),传入上一个请求的滚动id,以及一个滚动时间以保持滚动在Elasticsearch上打开。循环发送滚动请求,直到响应不包含任何文档。

看看