###solariumのpaginationを実現したい
solrの全文検索システムを作っています。
ページネーション機能を実装中にページ遷移先にデータが参照されませんでした。
###pagination実装ソースコード(Laravelのカスタムページネータを使用)修正前
PHP
1SearchController.php 2 3//クエリ 4$query = $this->client->createSelect(); 5$query->setQuery($request['keyword']); 6 7//クエリの結果を取得 8$resultset = $this->client->select($query); 9 10 11//ページネーション 12$perPage = $query->getRows(); //defalutの10件 13$startPage = $query->getStart(); //defalutの0件 14 15// Illuminate\Pagination\LengthAwarePaginator を使用し、カスタムページネータを作成 16 17//カスタムページネータ 18 $perPage = 10; 19 $startPage = $query->getStart(); //0 20 21// ページ番号 22 $page = max(0, Paginator::resolveCurrentPage() - 1); 23 24 $paginator=NULL; 25 foreach ($resultset as $document) { 26 27 // ページ内の要素を取得 28 $sliced = array_slice((array)$document->id, $page * $perPage, $perPage); 29 30 31 // ページネータインスタンス生成 32 $paginator = new LengthAwarePaginator( 33 $sliced, 34 $resultset_total,//$resultset_total = $resultset->getNumFound(); 35 $perPage, 36 null, 37 [ 38 'page' => $page, 39 'path' => Paginator::resolveCurrentPath(), 40 ] 41 42 ); 43 44 }
###修正後↓(解決)
PHP
1SearchController.php 2 3 4$query = $this->client->createSelect(); 5$query->setQuery($request['keyword']); 6 7$perPage = $query->getRows(); //defalutの10件 8$startPage = $query->getStart(); //defalutの0件 9 10 11 $page = max(0, Paginator::resolveCurrentPage()); //-1を削除 12 13 // 配列のoffset位置からperPage分の配列を切り抜く 14 $offset = ( $page * $perPage ) - $perPage; 15 16 $sliced = $query->setStart($offset)->setRows($perPage); 17 dump($sliced); 18 19 //結果 20 $resultset = $this->client->select($query); 21 22//結果を全件取得 23 $resultset_total = $resultset->getNumFound(); 24 25 $paginator = new LengthAwarePaginator( 26 $sliced, 27 $resultset_total, 28 $perPage, 29 $page, 30 [ 31 'page' => $page, 32 'path' => Paginator::resolveCurrentPath(), 33 'query' => ['keyword' => $request['keyword']], 34 35 ] 36 37 );
PHP
1search.blade.php 2 3<ul> 4 <li>{{ $paginator }}</li> 5</ul> 6
ページネーションはブラウザに表示されているが
2ページ目を押下するとURLはhttp://xxx.x.x.x/list?keyword=〇〇&page=2となりますが
結果は表示されない。
(1ページ目に全件表示されている)
###試したこと
https://stackoverflow.com/questions/17501630/how-do-you-paginate-in-solr-using-solarium
上記を参考にし、下記のようなlimitをつけて参照するようにする → 結果変わらず
$query->setStart(0)->setRows(20);
###バージョン
Laravel5.4
solarium 3.8
solr 5.5.4

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/06/13 09:26
2017/06/13 10:27
2017/06/13 10:53
2017/06/13 10:56