使用NEST在Elasticsearch中检索未知数量的文档

时间:2016-06-22 05:54:08

标签: .net elasticsearch nest bulk

我试图弄清楚如何使用NEST 2.3.2检索大量文档。由于响应中的文档数量有限制(由服务器管理员设置),我想使用Scroll是安全的。

我已阅读this,但我找不到使用NEST 2.3.2库实现这一目标的方法。此documentation适用于1.x,但不适用于2.x。

具体来说,当我尝试在SearchType = Elasticsearch.Net.SearchType.Scan中设置SearchRequest时,它会自动向/_search?search_type=scan发送请求,服务器只返回“search_phase_execution_exception”,因为“扫描时必须提供滚动”。 ..“。但我不知道如何获得滚动ID。

有谁知道如何实现这一目标?我想用可能的几个请求滚动限定文档,直到它们全部被检索。如果有人可以提供一些非常有用的示例代码。非常感谢你。

1 个答案:

答案 0 :(得分:2)

我尝试了类似这样的问题,我需要将所有文档编入索引,然后进行一些处理。我用过滚动。您可以从here

查看我的问题
var scanResults = client.Search<IndexName>(s => s
                .From(0)
                .Size(20) //any size you can give
                .MatchAll()
                .Source(so => so
                .Include(fi => fi.Field(fieldName))
                .SearchType(Elasticsearch.Net.SearchType.Scan)
                .Scroll("5m") //time for which the scrollId is saved. Can be anything.
            );

            var results = client.Scroll<IndexName>("10m", scanResults.ScrollId);

            while (results.Documents.Any())
            {
                //do whatever you want to do from the resultant documents

                results = client.Scroll<IndexName>("10m", results.ScrollId);
            }

有关scroll

的更多信息

希望这有帮助。