Tabla de contenidos
El componente Zend_Search_Lucene está pensado para proporcionar una
solución de búsqueda de texto completo lista para usar. No requiere ninguna extensión de PHP[1] ni software adicional para ser instalado, y puede usarse
inmediatamente después de la instalación de Zend Framework.
Zend_Search_Lucene es una adaptación (port) en PHP puro del
popular motor de búsqueda de texto completo de código abierto conocido como Apache Lucene. Consulte http://lucene.apache.org/ para más detalles.
La información debe ser indexada para estar disponible para la búsqueda.
Zend_Search_Lucene y Java Lucene usan un concepto de documento conocido como
"elemento atómico de indexación."
Cada documento es un conjunto de campos: pares <nombre, valor> donde el nombre y el valor son cadenas UTF-8[2]. Cualquier subconjunto de los campos del documento puede marcarse como "indexado" para incluir los datos del campo en el proceso de indexación de texto.
Los valores de los campos pueden ser tokenizados o no durante la indexación. Si un campo no es tokenizado, entonces el valor del campo se almacena como un único término; en caso contrario, se usa el analizador actual para la tokenización.
El paquete Zend_Search_Lucene proporciona varios analizadores.
El analizador por defecto funciona con texto ASCII (ya que el
analizador UTF-8 necesita que la extensión mbstring esté
activada). No distingue entre mayúsculas y minúsculas, y omite los números. Use otros analizadores o cree su
propio analizador si necesita cambiar este comportamiento.
![]() |
Uso de analizadores durante la indexación y la búsqueda |
|---|---|
¡Nota importante! Las consultas de búsqueda también se tokenizan usando el "analizador actual", por lo que debe establecerse el mismo analizador por defecto tanto durante el proceso de indexación como el de búsqueda. Esto garantizará que el texto original y el texto buscado se transformen en términos de la misma manera. |
Los valores de los campos se almacenan opcionalmente dentro de un índice. Esto permite que los datos originales del campo se recuperen del índice durante la búsqueda. Esta es la única forma de asociar los resultados de búsqueda con los datos originales (los IDs internos de documento pueden cambiar tras la optimización del índice o la auto-optimización).
Lo que debe recordarse es que un índice Lucene no es una base de datos. No proporciona mecanismos de respaldo de índice salvo la copia de seguridad del directorio del sistema de archivos. No proporciona mecanismos transaccionales, aunque sí se admiten la actualización concurrente del índice, así como la actualización y lectura concurrentes. No se compara con las bases de datos en cuanto a velocidad de recuperación de datos.
Así que es buena idea:
No usar el índice Lucene como almacenamiento, ya que puede disminuir drásticamente el rendimiento de recuperación de resultados de búsqueda. Almacene dentro de un índice solo identificadores únicos de documento (rutas de documento, URLs, IDs únicos de base de datos) y los datos asociados. Por ejemplo, título, anotación, categoría, información de idioma, avatar. (Nota: un campo puede incluirse en la indexación, pero no almacenarse, o almacenarse, pero no indexarse).
Escribir funcionalidad que pueda reconstruir un índice por completo si se corrompe por cualquier motivo.
Los documentos individuales en el índice pueden tener conjuntos de campos completamente diferentes. Los mismos campos en distintos documentos no necesitan tener los mismos atributos. Por ejemplo, un campo puede estar indexado para un documento y omitido de la indexación para otro. Lo mismo aplica para el almacenamiento, la tokenización, o el tratamiento del valor del campo como una cadena binaria.
![[Note]](images/note.png)