elasticsearch 如何使用带ElasticSearch Nest的X.PagedList?
背景 我正在使用ElasticSearch作为一个新的ASP.NETCore2.1网站的搜索引擎。我正在使用nestapi与之集成。我想使用X.PagedList为我处理分页 我在其他ASP.Net核心项目中也使用过它,在MS SQL Server中查询数据时效果很好 代码
elasticsearch 如何使用带ElasticSearch Nest的X.PagedList?,
elasticsearch,asp.net-core,.net-core,pagedlist,
elasticsearch,Asp.net Core,.net Core,Pagedlist,背景 我正在使用ElasticSearch作为一个新的ASP.NETCore2.1网站的搜索引擎。我正在使用nestapi与之集成。我想使用X.PagedList为我处理分页 我在其他ASP.Net核心项目中也使用过它,在MS SQL Server中查询数据时效果很好 代码 ISearchResponse<Foo> searchResponse = _elasticSearchClient.Search<Foo>(s => s
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);
ISearchResponse搜索响应=
_elasticSearchClient.Search(s=>s
.Query(q=>q
.Bool(b=>b.Filter(距离过滤器))
)
.Source(src=>src
.包括(i=>i
.菲尔德(
f=>f.Field1,
f=>f.Field2,
f=>f.Field3
)
)
)
.From(选项.From)
.Size(选项.Size)
);
var hitsMD=searchResponse.HitsMetadata;
var results=hitsMD?.Hits.Select(s=>new Hit()
{
指数=s.指数,
Id=s.Id,
分数=s.分数,
Job=s.Source
}
).ToPagedList(页码、页面大小);
问题
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列表中有多少项。然而,我不能这样做,因为这是一个私人设置
我已经尝试过删除from和size,但这会返回10个点击,这是ElasticSearch的默认大小,显然是出于性能原因
问题
如何在使用Nest API集成到ElasticSearch的同时使用X.PagedList包?您基本上已经掌握了所有内容。您所缺少的只是
静态页面列表
。由于Elasticsearch已经在处理分页,您只需定义一个静态分页设置,即:
var pagedResults = new StaticPagedList<Foo>(results, PageNumber, PageSize, total);
var pagedResults=新的静态页面列表(结果、页码、页面大小、总数);
太好了,谢谢你@Chris Pratt。分页列表寻呼机使用页码作为查询字符串的一部分。ElasticSearch页面基于From和Size。是否有一种方法可以使用From按大小递增来呈现PagedListPager?我可以在我的模型上编程From属性,根据page*大小进行计算,但我更愿意连接From并将其传递到ElasticSearch。我正在使用的示例PagedListPager@Html.PagedListPager(Model,page=>Url.Action(“搜索”,新建{page,keywords=options.keywords,location=options.location,distance=options.distance,size=options.size}))