Запрос 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.

Другие вопросы по тегам