如何在 Sphinx 中使用 Laravel 分页
How to use Laravel pagination with Sphinx
在我的搜索控制器中,我使用 Sphinx 来获取结果。它看起来像这样:
$cl = new SphinxSearch();
$results = $cl->setMatchMode(\Sphinx\SphinxClient::SPH_MATCH_EXTENDED);
$results = $cl->setSortMode(\Sphinx\SphinxClient::SPH_SORT_ATTR_DESC, "start");
$results = $cl->search('@*' . $name, 'spots');
$results = $cl->get();
它显示了几百个结果,加载起来真的很重。我知道 Laravel 具有分页功能(https://laravel.com/docs/5.4/pagination), but I don't know how to use it with this Sphinx package. BTW I use this one - https://github.com/sngrl/sphinxsearch
有什么建议吗?
您可以使用 Sphinx 结果创建分页器。从 Sphinx 获取分页结果后。
$paginator = new LengthAwarePaginator(
$results,
$totalResultsCount,
$perPage,
$currentPage
);
$paginator->setCollection(collect($results));
手动创建分页器实例时,您应该手动 "slice" 传递给分页器的结果数组。因此来自控制器的方法将如下所示:
public function doSearch()
{
$template = 'search/search_results';
$filters = Input::get('filter');
$currentPage = Input::get('page') ? Input::get('page') : 1;
$perPage = 5;
// prepare $sphinxQuery using the filters received
$results = SphinxSearch::search($sphinxQuery, 'indexname')
->setFieldWeights(
array(
'name' => 10,
)
)
->setMatchMode(SphinxClient::SPH_MATCH_EXTENDED)
->setSortMode(SphinxClient::SPH_SORT_EXTENDED, "name ASC")
->limit(1000)
->get(true);
$paginator = new LengthAwarePaginator(
collect($results)->forPage($currentPage, $perPage), sizeof($results), $perPage, $currentPage
);
$paginator->setPath(route('name.of.the.route'));
$paginator->setPageName('page');
$data['items'] = $paginator;
return View::make($template, $data);
}
并且在 blade 模板中:
<?php echo $items->appends(['filter' => Request::get('filter')])->render(); ?>
在我的搜索控制器中,我使用 Sphinx 来获取结果。它看起来像这样:
$cl = new SphinxSearch();
$results = $cl->setMatchMode(\Sphinx\SphinxClient::SPH_MATCH_EXTENDED);
$results = $cl->setSortMode(\Sphinx\SphinxClient::SPH_SORT_ATTR_DESC, "start");
$results = $cl->search('@*' . $name, 'spots');
$results = $cl->get();
它显示了几百个结果,加载起来真的很重。我知道 Laravel 具有分页功能(https://laravel.com/docs/5.4/pagination), but I don't know how to use it with this Sphinx package. BTW I use this one - https://github.com/sngrl/sphinxsearch
有什么建议吗?
您可以使用 Sphinx 结果创建分页器。从 Sphinx 获取分页结果后。
$paginator = new LengthAwarePaginator(
$results,
$totalResultsCount,
$perPage,
$currentPage
);
$paginator->setCollection(collect($results));
手动创建分页器实例时,您应该手动 "slice" 传递给分页器的结果数组。因此来自控制器的方法将如下所示:
public function doSearch()
{
$template = 'search/search_results';
$filters = Input::get('filter');
$currentPage = Input::get('page') ? Input::get('page') : 1;
$perPage = 5;
// prepare $sphinxQuery using the filters received
$results = SphinxSearch::search($sphinxQuery, 'indexname')
->setFieldWeights(
array(
'name' => 10,
)
)
->setMatchMode(SphinxClient::SPH_MATCH_EXTENDED)
->setSortMode(SphinxClient::SPH_SORT_EXTENDED, "name ASC")
->limit(1000)
->get(true);
$paginator = new LengthAwarePaginator(
collect($results)->forPage($currentPage, $perPage), sizeof($results), $perPage, $currentPage
);
$paginator->setPath(route('name.of.the.route'));
$paginator->setPageName('page');
$data['items'] = $paginator;
return View::make($template, $data);
}
并且在 blade 模板中:
<?php echo $items->appends(['filter' => Request::get('filter')])->render(); ?>