Tarde o temprano tendremos que crear una tarea que se encargue de limpiar el índice borrando las ofertas de trabajo expiradas y optimizando periódicamente el índice. Como ya disponemos de una tarea que se encarga de la limpieza de la base de datos, podemos actualizarla para que también se encargue del mantenimiento del índice:
// lib/task/JobeetCleanupTask.class.php
protected function execute($arguments = array(), $options = array())
{
$databaseManager = new sfDatabaseManager($this->configuration);
// cleanup Lucene index
$index = JobeetJobPeer::getLuceneIndex();
$criteria = new Criteria();
$criteria->add(JobeetJobPeer::EXPIRES_AT, time(), Criteria::LESS_THAN);
$jobs = JobeetJobPeer::doSelect($criteria);
foreach ($jobs as $job)
{
if ($hit = $index->find('pk:'.$job->getId()))
{
$hit->delete();
}
}
$index->optimize();
$this->logSection('lucene', 'Cleaned up and optimized the job index');
// Remove stale jobs
$nb = JobeetJobPeer::cleanup($options['days']);
$this->logSection('propel', sprintf('Removed %d stale jobs', $nb));
}
La tarea anterior ahora también elimina del índice todas las ofertas de trabajo expiradas y optimiza el índice gracias al método optimize()
incluido en Zend Lucene.