La indexación se realiza añadiendo un nuevo documento a un índice existente o nuevo:
$index->addDocument($doc);
Hay dos formas de crear un objeto documento. La primera es hacerlo manualmente.
Ejemplo 10.3. Construcción manual de un documento
$doc = new Zend_Search_Lucene_Document();
$doc->addField(Zend_Search_Lucene_Field::Text('url', $docUrl));
$doc->addField(Zend_Search_Lucene_Field::Text('title', $docTitle));
$doc->addField(Zend_Search_Lucene_Field::unStored('contents', $docBody));
$doc->addField(Zend_Search_Lucene_Field::binary('avatar', $avatarData));
El segundo método es cargarlo desde archivos HTML o de Microsoft Office 2007:
Ejemplo 10.4. Carga de un documento
$doc = Zend_Search_Lucene_Document_Html::loadHTML($htmlString); $doc = Zend_Search_Lucene_Document_Docx::loadDocxFile($path); $doc = Zend_Search_Lucene_Document_Pptx::loadPptFile($path); $doc = Zend_Search_Lucene_Document_Xlsx::loadXlsxFile($path);
Si un documento se carga desde uno de los formatos soportados, aún puede extenderse manualmente con nuevos campos definidos por el usuario.
Debería definir la política de indexación dentro del diseño arquitectónico de su aplicación.
Puede que necesite una configuración de indexación bajo demanda (algo similar a un sistema OLTP). En tales sistemas, habitualmente se añade un documento por cada petición del usuario. En ese caso, la opción MaxBufferedDocs no afectará al sistema. Por otro lado, MaxMergeDocs resulta realmente útil, ya que permite limitar el tiempo máximo de ejecución del script. MergeFactor debería establecerse en un valor que mantenga el equilibrio entre el tiempo medio de indexación (que también se ve afectado por el tiempo medio de auto-optimización) y el rendimiento de búsqueda (el nivel de optimización del índice depende del número de segmentos).
Si va a realizar principalmente actualizaciones de índice por lotes, su configuración debería usar una opción MaxBufferedDocs establecida en el valor máximo soportado por la cantidad de memoria disponible. MaxMergeDocs y MergeFactor deben establecerse en valores que reduzcan al máximo posible la intervención de la auto-optimización [5]. Debería aplicarse una optimización completa del índice tras la indexación.
En algunas configuraciones, resulta más eficaz serializar las actualizaciones del índice organizando las peticiones de actualización en una cola y procesando varias peticiones de actualización en una sola ejecución del script. Esto reduce la sobrecarga de apertura del índice y permite aprovechar el almacenamiento en búfer de documentos del índice.
[5] Un límite adicional es el número máximo de manejadores de archivos que soporta el sistema operativo para operaciones concurrentes abiertas