<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: no -->
<sect1 id="learning.lucene.pagination">
    <title>Pagination de résultat de recherche</title>

    <para>
        Comme <link linkend="learning.lucene.searching.identifiers">mentionné plus haut</link>,
        les objets de résultats de recherche utilisent le lazy loading pour les champs de documents
        stockés. Lorsque l'on accède à l'un des champs stockés, le document complet est chargé.
    </para>

    <para>
        Ne récupérez pas tous les documents si vous avez seulement besoin de travailler sur une
        partie. Parcourez les résultats de recherche et stockez l'ID du document (et éventuellement
        son score) afin de récupérer les documents depuis l'index pendant la prochaine exécution
        du script.
    </para>

    <example id="learning.lucene.pagination.example">
        <title>Exemple de pagination de résultat de recherche</title>

        <programlisting language="php"><![CDATA[
$cacheId = md5($query);
if (!$resultSet = $cache->load($cacheId)) {
    $hits = $index->find($query);
    $resultSet = array();
    foreach ($hits as $hit) {
        $resultSetEntry          = array();
        $resultSetEntry['id']    = $hit->id;
        $resultSetEntry['score'] = $hit->score;
        $resultSet[] = $resultSetEntry;
    }
    $cache->save($resultSet, $cacheId);
}
$publishedResultSet = array();
for ($resultId = $startId; $resultId < $endId; $resultId++) {
    $publishedResultSet[$resultId] = array(
        'id'    => $resultSet[$resultId]['id'],
        'score' => $resultSet[$resultId]['score'],
        'doc'   => $index->getDocument($resultSet[$resultId]['id']),
    );
}
]]></programlisting>
    </example>
</sect1>
