[英]Elastic Search scrolling with NEST and C#
我正在使用以下代碼循環/滾動彈性搜索框中的所有文檔:
const string indexName = "bla";
var client = GetClient(indexName);
const int scrollTimeout = 1000;
var initialResponse = client.Search<Document>
(scr => scr.Index(indexName)
.From(0)
.Take(100)
.MatchAll()
.Scroll(scrollTimeout))
;
List<XYZ> results;
results = new List<XYZ>();
if (!initialResponse.IsValid || string.IsNullOrEmpty(initialResponse.ScrollId))
throw new Exception(initialResponse.ServerError.Error.Reason);
if (initialResponse.Documents.Any())
results.AddRange(initialResponse.Documents);
var scrollid = initialResponse.ScrollId;
bool isScrollSetHasData = true;
while (isScrollSetHasData)
{
var loopingResponse = client.Scroll<XYZ>(scrollTimeout, scrollid);
if (loopingResponse.IsValid)
{
results.AddRange(loopingResponse.Documents);
scrollid = loopingResponse.ScrollId;
}
isScrollSetHasData = loopingResponse.Documents.Any();
// do some amazing stuff
}
client.ClearScroll(new ClearScrollRequest(scrollid));
出於某種原因, loopingResponse 比預期的要早得多 - 即滾動完成。 有人能看出我的代碼有什么根本性的錯誤嗎? 謝謝!
查看您的代碼,我認為scrollTimeout
可能是問題所在。 通常滾動用於要返回的大塊數據,並且 1000 毫秒不足以在請求之間保持搜索上下文處於活動狀態。 您可以嘗試將其增加到幾分鍾以找到最適合您的情況的數字:
var scrollTimeout = new Time(TimeSpan.FromMinutes(3));
或者根據源代碼,您可以使用時間單位(微米、納米、毫秒、s、m、h 和 d):
var response = client.Search<Document>(scr => scr.Index(indexName)
...
.Scroll("3m")
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.