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 的工作方式。
- 第一个请求是
.Search<T>()
(或SearchAsync<T>()
),指定.Scroll()
时间。响应将包含第一组文档
- 后续请求是
.Scroll<T>
(或ScrollAsync<T>()
),传入上一个请求的滚动id,以及一个滚动时间以保持滚动在Elasticsearch上打开。循环发送滚动请求,直到响应不包含任何文档。
看看
我试图理解为什么 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 的工作方式。
- 第一个请求是
.Search<T>()
(或SearchAsync<T>()
),指定.Scroll()
时间。响应将包含第一组文档 - 后续请求是
.Scroll<T>
(或ScrollAsync<T>()
),传入上一个请求的滚动id,以及一个滚动时间以保持滚动在Elasticsearch上打开。循环发送滚动请求,直到响应不包含任何文档。
看看