Как я могу использовать X.PagedList с ElasticSearch Nest?

Фон

Я использую ElasticSearch в качестве поисковой системы для нового веб-сайта ASP.Net Core 2.1, над которым я работаю. Я использую Nest API для интеграции с ним. Я хочу использовать X.PagedList для обработки подкачки для меня.

Я использовал это в других проектах ASP.Net Core, и он хорошо работал для запроса данных в MS SQL Server.

Код

ISearchResponse<Foo> searchResponse = 
        _elasticSearchClient.Search<Foo>(s => s
                    .Query(q => q
                        .Bool(b => b.Filter(distanceFilters))
                        )
                    .Source(src => src
                                .Includes(i => i
                                        .Fields(
                                                f => f.Field1,
                                                f => f.Field2,
                                                f => f.Field3
                                                )
                                            )
                            )
                    .From(options.From)
                    .Size(options.Size)
                );

var hitsMD = searchResponse.HitsMetadata;
var results = hitsMD?.Hits.Select(s => new Hit()
{
    Index = s.Index,
    Id = s.Id,
    Score = s.Score,
    Job = s.Source
}
).ToPagedList(PageNumber, PageSize);

вопрос

Когда я вызываю.ToPagedList для результатов поиска, возвращаемых ElasticSearch, он показывает только одну страницу результатов.

Проблема в том, что ElasticSearch имеет собственный механизм разбиения на страницы, поэтому он возвращает только одну страницу обращений.

У меня была идея, что, поскольку ElasticSearch возвращает общее количество обращений, я мог сообщить PagedList, сколько элементов в списке, установив свойство PagedList.TotalItemCount. Тем не менее, я не могу сделать это, поскольку это частный набор.

Я попытался удалить значения from и size, но это возвращает 10 совпадений, что является размером по умолчанию для ElasticSearch, который они явно установили для повышения производительности.

Вопрос

Как я могу использовать пакет X.PagedList при интеграции с ElasticSearch с помощью Nest API?

1 ответ

Решение

У вас уже есть все кусочки. Все, что вам не хватает, это StaticPagedList<T>, Поскольку подкачка страниц уже обрабатывается Elasticsearch, вам нужно просто определить статическую настройку подкачки, то есть:

var pagedResults = new StaticPagedList<Foo>(results, PageNumber, PageSize, total);
Другие вопросы по тегам