Запрос ElasticSearch с использованием NEST 2.x с прокруткой не возвращает результат
Я пытаюсь получить все данные из asticsearch на основе вхождения сообщения, я решил, что, если бы я использовал 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);
}
response.Document становится пустым, если я использую свиток, если я удаляю и получаю первые 1000 сообщений, которые могу получить данные, что-то не так с тем, как я использую Scroll?
1 ответ
Если вы укажете .SearchType(SearchType.Scan)
первый ответ не содержит никаких документов; Это даст вам общее количество документов в .Total
свойство, которое будет возвращено прокруткой с использованием .ScrollId
на ответ в запросе прокрутки.
Если вы не укажете .SearchType(SearchType.Scan)
первый ответ будет содержать первый комплект документов.
Это разница в Elasticsearch, а не в NEST. SearchType.Scan
на самом деле устарела в 2.1.0, но все еще в NEST 2.x, поскольку поддерживает все второстепенные версии Elasticsearch 2.x.