TigerZF
🌐Español

10.7. Paginación de resultados de búsqueda

Como se mencionó anteriormente, los objetos hit de resultados de búsqueda utilizan carga diferida para los campos de documento almacenados. Cuando se accede a cualquier campo almacenado, se carga el documento completo.

No recupere todos los documentos si en realidad solo necesita trabajar con una parte de ellos. Recorra los resultados de búsqueda y almacene los ID de documento (y opcionalmente la puntuación) en algún lugar para recuperar los documentos del índice durante la siguiente ejecución del script.

Ejemplo 10.25. Ejemplo de paginación de resultados de búsqueda

$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']),
    );
}