2
0

lucene-pagination.xml 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- Reviewed: no -->
  3. <!-- EN-Revision: 24249 -->
  4. <sect1 id="learning.lucene.pagination">
  5. <title>検索結果のページ化</title>
  6. <para>
  7. <link linkend="learning.lucene.searching.identifiers">上記</link>
  8. のように、検索結果ヒット・オブジェクトでは、格納された文書項目に対して
  9. 遅延読み込みを使います。格納された項目のどれかがアクセスされると、
  10. 全ての文書が読み込まれます。
  11. </para>
  12. <para>
  13. もし、実際にはその一部だけで作業したい場合、全ての文書を取り出ししないでください。
  14. 検索結果を調べて、次のスクリプト実行中に文書をインデックスから取り出すために、
  15. 文書ID(任意にスコア)をどこかに保存してください。
  16. </para>
  17. <example id="learning.lucene.pagination.example">
  18. <title>検索結果のページ化例</title>
  19. <programlisting language="php"><![CDATA[
  20. $cacheId = md5($query);
  21. if (!$resultSet = $cache->load($cacheId)) {
  22. $hits = $index->find($query);
  23. $resultSet = array();
  24. foreach ($hits as $hit) {
  25. $resultSetEntry = array();
  26. $resultSetEntry['id'] = $hit->id;
  27. $resultSetEntry['score'] = $hit->score;
  28. $resultSet[] = $resultSetEntry;
  29. }
  30. $cache->save($resultSet, $cacheId);
  31. }
  32. $publishedResultSet = array();
  33. for ($resultId = $startId; $resultId < $endId; $resultId++) {
  34. $publishedResultSet[$resultId] = array(
  35. 'id' => $resultSet[$resultId]['id'],
  36. 'score' => $resultSet[$resultId]['score'],
  37. 'doc' => $index->getDocument($resultSet[$resultId]['id']),
  38. );
  39. }
  40. ]]></programlisting>
  41. </example>
  42. </sect1>