El el blog de Spindrop hay un excelente ejemplo de como usar esta herramienta. Para facilitar aún más el uso de la misma, supongamos que tenemos un índice de texto para toda la aplicación, y queremos tener la posibilidad de instanciar el mismo desde cualquier parte de la misma. Para eso lo mejor es crear una clase singleton que podamos llamar y que nos retorne un objeto de tipo Zend_search_lucene. A continuación se muestra una clase que realiza este proceso. La misma incluso, en caso de que sea un índice nuevo, lo crea, y queda disponible para su posterior uso.
<?php
class sfIndex extends Zend_Search_Lucene
{
protected static $instance = null;
public static function getInstance()
{
if (!isset(self::$instance))
{
$class = __CLASS__;
$new = false;
$default_dir = sfConfig::get('sf_data_dir').DIRECTORY_SEPARATOR.SF_APP.DIRECTORY_SEPARATOR.'index';
$index_dir = sfConfig::get('app_index',$default_dir);
if (!is_dir($index_dir)) {
mkdir($index_dir);
$new = true;
}
self::$instance = new $class($index_dir,$new);
}
return self::$instance;
}
public function deleteDocByKeyword($keyword, $value)
{
$term = new Zend_Search_Lucene_Index_Term($value, $keyword);
$query = new Zend_Search_Lucene_Search_Query_Term($term);
$hits = array();
$hits = $this->find($query);
foreach ($hits AS $hit)
{
$this->delete($hit->id);
}
}
}
}
Esta clase se debe colocar en la carpeta lib de proyecto. Para poder usarla basta con definir el valor index en el archivo app.yml para indicar la carpeta donde se generará el índice, y posteriormente crear una instancia del objeto
$index = sfIndex::getInstance();