1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
|
<?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>
|