Estoy usando Zend_Search_Lucene para crear un índice de artículos que permitan su búsqueda en mi sitio web. Cada vez que un administrador actualizaciones/crea/elimina un artículo en el área de administración, el índice se reconstruye:Creando y actualizando los índices de Zend_Search_Lucene
$config = Zend_Registry::get("config");
$cache = $config->lucene->cache;
$path = $cache . "/articles";
try
{
$index = Zend_Search_Lucene::open($path);
}
catch (Zend_Search_Lucene_Exception $e)
{
$index = Zend_Search_Lucene::create($path);
}
$model = new Default_Model_Articles();
$select = $model->select();
$articles = $model->fetchAll($select);
foreach ($articles as $article)
{
$doc = new Zend_Search_Lucene_Document();
$doc->addField(Zend_Search_Lucene_Field::Text("title", $article->title));
$index->addDocument($doc);
}
$index->commit();
Mi pregunta es la siguiente. Ya que estoy reindexando los artículos y manejando los artículos eliminados también, ¿por qué no debería simplemente usar "crear" cada vez (en lugar de "abrir" y actualizar)? Usando el método anterior, creo que los artículos se agregarán con addDocument cada vez (por lo que habría duplicados). ¿Cómo evitaría eso? ¿Hay alguna manera de verificar si un documento ya existe en el índice?
Además, no creo que entienda completamente cómo funciona la indexación cuando la "abre" y la actualiza. Parece crear nuevos archivos # .cfs (así que tengo _0.cfs, _1.cfs, _2.cfs) en la carpeta de índice cada vez, pero cuando uso "create", sobrescribe ese archivo con un nuevo # .cfs archivo con el # incrementado (así, por ejemplo, solo _2.cfs). ¿Puedes explicarnos qué son estos archivos segmentados?
vendido! muchas gracias. – typeoneerror