【问题标题】:Elasticsearch.net - NEST Scroll keeps returning the same resultsElasticsearch.net - NEST Scroll 不断返回相同的结果
【发布时间】:2017-02-07 17:40:04
【问题描述】:

我试图了解为什么 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,与它们所包含的对象存在一对多关系。这就是我想使用滚动的原因,因为我不知道将返回多少 Invoice 对象。每次调用 currentPage 时,都会增加 1。我曾假设将返回滚动中的下一批。

我认为我做错了什么,因为我认为这更像是一个分页流程。

【问题讨论】:

    标签: .net elasticsearch scroll nest


    【解决方案1】:

    这不是Scroll API 的工作原理。

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

    看看this answer for an example

    【讨论】:

    • 再次感谢拉斯!我没有注意到第一次和随后的检索使用不同的调用类型。现在一切都按计划进行,我很兴奋!
    猜你喜欢
    • 2018-11-07
    • 2015-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多