gpt4 book ai didi

elasticsearch - 如何将 X.PagedList 与 ElasticSearch Nest 一起使用?

转载 作者:行者123 更新时间:2023-12-02 23:19:01 36 4
gpt4 key购买 nike

背景

我正在使用 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);

问题

当我对 ElasticSearch 返回的搜索结果调用 .ToPagedList 时,它只显示一页结果。

问题是 ElasticSearch 有自己的分页机制,所以它只返回一页命中。

我的想法是,因为 ElasticSearch 传回了点击总数,我可以通过设置 PagedList.TotalItemCount 属性告诉 PagedList 列表中有多少项目。但是,我不能这样做,因为它是私有(private)套装。

我已经尝试删除 from 和 size 但这会返回 10 个命中,这是 ElasticSearch 的默认大小,他们显然出于性能原因将其放置在适当的位置。

问题

如何在使用 Nest API 集成到 ElasticSearch 的同时使用 X.PagedList 包?

最佳答案

你基本上已经把所有的东西都放在这里了。你所缺少的只是StaticPagedList<T> .由于 Elasticsearch 已经在处理分页,因此您需要简单地定义一个静态分页设置,即:

var pagedResults = new StaticPagedList<Foo>(results, PageNumber, PageSize, total);

关于elasticsearch - 如何将 X.PagedList 与 ElasticSearch Nest 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51629761/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com