Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
<img src="//i.stack.imgur.com/RUiNP.png" height="16" width="18" alt="" class="sponsor tag img">elasticsearch 如何使用带ElasticSearch Nest的X.PagedList?_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Asp.net Core_.net Core_Pagedlist - Fatal编程技术网 elasticsearch 如何使用带ElasticSearch Nest的X.PagedList?,elasticsearch,asp.net-core,.net-core,pagedlist,elasticsearch,Asp.net Core,.net Core,Pagedlist" /> elasticsearch 如何使用带ElasticSearch Nest的X.PagedList?,elasticsearch,asp.net-core,.net-core,pagedlist,elasticsearch,Asp.net Core,.net Core,Pagedlist" />

elasticsearch 如何使用带ElasticSearch Nest的X.PagedList?

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

背景

我正在使用ElasticSearch作为一个新的ASP.NETCore2.1网站的搜索引擎。我正在使用nestapi与之集成。我想使用X.PagedList为我处理分页

我在其他ASP.Net核心项目中也使用过它,在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);
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}))