Has*_*tou 3 c# elasticsearch nest
我想使用 Nest 在 Elasticsearch 中查询超过一百万个文档。我的代码:
var response = client.Search<MyObject>(s => s
.Index("test")
.Type("one")
.Query(q => q.
Term(
t => t.name, "A"
)
)
.Size(10000)
.Scroll("10m")
.Pretty()
);
Run Code Online (Sandbox Code Playgroud)
我的 MyObject 类:
public class MyObject
{
public int id { get; set; }
public int age { get; set; }
public string lastname { get; set; }
public string name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
问题是,当在前 10k 文档中找不到此查询时,它不会继续搜索结果滚动 API 的其余部分。
我的问题是如何实现这一点(即在 Scroll API 中移动整个页面,尽管没有点击......)?
该查询将搜索所有文档,但只会返回最多的.Size文档数。
您可以使用.From()和 来对结果进行分页.Size(),但是,当对超过一百万个文档进行分页时,深度分页可能会成为一个问题。为此,您最好使用滚动 API来高效检索 100 万个文档。NEST 有一个可观察的助手ScrollAll()来帮助解决这个问题
var client = new ElasticClient();
// number of slices in slice scroll
var numberOfSlices = 4;
var scrollObserver = client.ScrollAll<MyObject>("1m", numberOfSlices, s => s
.MaxDegreeOfParallelism(numberOfSlices)
.Search(search => search
.Index("test")
.Type("one")
.Term(t => t.name, "A")
)
).Wait(TimeSpan.FromMinutes(60), r =>
{
// do something with documents from a given response.
var documents = r.SearchResponse.Documents;
});
Run Code Online (Sandbox Code Playgroud)