gpt4 book ai didi

c# - 使用NEST和C#进行 Elasticsearch 滚动

转载 作者:行者123 更新时间:2023-12-03 01:23:16 25 4
gpt4 key购买 nike

我正在使用以下代码在 flex 搜索框中循环/滚动所有文档:

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可能是问题。通常,滚动用于返回大块数据,而1000ms不足以使请求之间的搜索上下文保持 Activity 状态。您可以尝试将其增加到几分钟,以找到最适合您的案例的数字:

var scrollTimeout = new Time(TimeSpan.FromMinutes(3));

或者根据 source code您可以使用时间单位(微米,纳米,ms,s,m,h和d):
var response = client.Search<Document>(scr => scr.Index(indexName)
...
.Scroll("3m")
);

关于c# - 使用NEST和C#进行 Elasticsearch 滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59270216/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com