使用带滚动的NEST2.x的ElasticSearch查询未返回结果

本文关键字:查询 返回 结果 ElasticSearch NEST2 滚动 | 更新日期: 2023-09-27 17:57:47

我正试图根据消息的出现从弹性搜索中检索所有数据,我想如果我使用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条消息,我使用滚动的方式有什么问题吗?

使用带滚动的NEST2.x的ElasticSearch查询未返回结果

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

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

这是Elasticsearch和NEST的区别。SearchType.Scan实际上在2.1.0中已弃用,但在NEST 2.x中仍然存在,因为它支持Elasticsearch 2.x的所有次要版本。