Как я могу использовать 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);