使用带有滚动的NEST 2.x的ElasticSearch查询不返回结果

时间:2016-07-20 14:24:39

标签: c# .net elasticsearch nest elasticsearch-2.0

我试图根据消息发生从弹性搜索中检索所有数据,我想如果我使用Scroll,我可以循环直到文档搜索结束,但是后面的查询返回Documents = 0但Total = 1954:

var response = client.Search<Log4Net>(s => s
                                            .Query(q => q.QueryString(qs => qs
                                             .DefaultField(m => m.Message).Query("\"" + message + "\"")))
                                             .SearchType(SearchType.Scan)
                                             .Scroll("60s"));
        while (response.Documents.Any())
        {
            var request = new BulkRequest();
            request.Refresh = true;
            request.Consistency = Consistency.One;
            request.Operations = new List<IBulkOperation>();
            foreach (var item in response.Documents)
            {
                request.Operations.Add(new BulkIndexOperation<Log4Net>(item));
            }

            var result = client.Bulk(request);

            response = client.Scroll<Log4Net>("60s", response.ScrollId);
        }

如果我使用滚动,则响应。文档将变为空,如果我删除并获取前1000条消息,我可以获取数据,我是如何使用滚动的?

1 个答案:

答案 0 :(得分:2)

如果您指定.SearchType(SearchType.Scan),则第一个回复不包含任何文件;它将为您提供.Total属性中的总文档,这些文档将通过滚动请求中的响应上的.ScrollId滚动来返回。

如果您未指定 .SearchType(SearchType.Scan),则第一个回复将包含第一组文档。

这是Elasticsearch的一个区别,而不是NEST。 SearchType.Scan is actually deprecated in 2.1.0,但仍然在NEST 2.x中,因为它支持Elasticsearch 2.x的所有次要版本。