使用带滚动的 NEST 2.x 的 ElasticSearch 查询未返回结果
ElasticSearch query using NEST 2.x with scroll is not returning result
我正在尝试根据出现的消息从 elasticsearch 中检索所有数据,我想如果我使用 Scroll 我可以循环直到文档搜索结束但是下面的查询 returns Documents = 0 但是总计 = 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);
}
如果我使用滚动条,response.Document 将变空,如果我删除并获取前 1000 条消息,我可以获得数据,我使用滚动条的方式有什么问题吗?
如果指定.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。
我正在尝试根据出现的消息从 elasticsearch 中检索所有数据,我想如果我使用 Scroll 我可以循环直到文档搜索结束但是下面的查询 returns Documents = 0 但是总计 = 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);
}
如果我使用滚动条,response.Document 将变空,如果我删除并获取前 1000 条消息,我可以获得数据,我使用滚动条的方式有什么问题吗?
如果指定.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。