Un motor de búsqueda basado en Zend_Search_Lucene para un portal de empleo

Zend_Search_Lucene es el motor de búsqueda de Zend Framework escrito íntegramente en PHP 5. Este buscador funciona de forma muy diferente a como gestionaríamos las búsquedas con un servidor de bases de datos (SGBD o RDBMS) típico.

Efectivamente, entre sus particularidades se cuentan el almacenar los índices en el sistema de archivos y el apoyarse en un sistema orientado a documentos. Zend_Search_Lucene puede añadir capacidades muy interesantes a tu web. Este artículo presenta brevemente este componente de Zend y explica cómo utilizarlo en el contexto concreto de un portal de búsqueda de empleo.

Zend_Search_Lucene es un motor de búsqueda full-text. Un motor full-text almacena y busca la información de un website en un archivo índice separado del contenido de la página. A nivel físico, la información se almacena en el sistema de ficheros de manera mucho más eficiente que con las bases de datos, e independientemente del contenido de éstas. En la perspectiva del programador, a nivel conceptual, el índice está formado por documentos -objetos de tipo Zend_Search_Lucene_Document– con varios campos -objetos de tipo Zend_Search_Lucene_Field-. Los campos de los documentos son los que tienen la información. Es interesante trabajar con buscadores full-text por cuestiones de eficiencia.

La ordenación de resultados por relevancia es un problema no trivial. Pues bien, otra ventaja nada desdeñable de Zend_Search_Lucene es que implementa algoritmos complejos para ordenar por relevancia los resultados; es decir, los usuarios escriben palabras en la caja de búsqueda y la SERP (Search Engine Results Page) ya sale ordenada de acuerdo a lo que los usuarios buscan.

Es interesante que veas a Zend_Search_Lucene como un pequeño Google en tanto que su índice viene a ser sólo una representación del contenido real sobre el que puede llegar a operar. Según esta analogía, toda la Web sería como la base de datos de tu website, y las páginas indexadas por Google serían los documentos que te has preocupado de poner en tu índice.

Los índices de los buscadores full-text exigen un mantenimiento. Debes preocuparte de mantener actualizado el índice de tu buscador para que la información que contiene refleje bien el contenido real que maneja tu website.

Portal de búsqueda de empleo

Los usuarios de nuestro portal de búsqueda de empleo tienen a su disposición un buscador como el siguiente:

El portal trabaja con este buscador en diferentes puntos. Es interesante, por lo tanto, encapsular sus particularidades específicas -fíjate que hay una caja de texto para escribir palabras clave, una lista desplegable para seleccionar una especialidad y una lista desplegable para seleccionar una provincia- en una clase PHP que se preocupe de hacer las gestiones pertinentes: abrir el índice, inicializar los valores con los datos que introduce el usuario, construir la consulta con la sintaxis adecuada para que la entienda el analizador de Zend_Search_Lucene, ejecutar la consulta, almacenar los datos de la búsqueda en la sesión, etc.

Vamos a programar la clase SearchEngine.php para poder lanzar cómodamente consultas al índice del buscador en cualquier punto de nuestra aplicación web. Nos aproximaremos a la implementación de la clase SearchEngine.php desde un punto de vista funcional. Imaginaremos que ya está hecha; de este modo nos daremos cuenta más fácilmente de cómo hay que programarla en realidad.

Veamos pues cómo podemos utilizar SearchEngine.php en el cuerpo del programa principal. Por ejemplo, cuando los usuarios aterrizan por primera vez en nuestro portal de empleo nos va a interesar mostrarles las entradas del buscador completamente vacías. Además, cuando esto suceda, tendremos que mostrarles la primera página de resultados correspondiente a dichas entradas:

Supongamos ahora que el usuario realiza una búsqueda. En este caso el programa principal podría ser así:

Una vez analizado lo anterior, cómo debemos comunicarnos con el buscador -una vez definida la interfaz-, ya podemos implementar los métodos que necesita la clase SearchEngine.php para poder trabajar según lo observado.

Tal vez la complicación más grande esté en la implementación del método setQueryString(). Este método toma los valores de la entrada del usuario -las palabras clave de la caja de texto, la especialiad y la provincia- y construye la consulta textual correspondiente de acuerdo al lenguaje de consultas de Zend_Search_Lucene que puedes examinar en la documentación oficial de Zend.

¿Y qué hay del mantenimiento del índice? Este post implementa la clase SearchEngine.php que encapsula la funcionalidad relacionada con las consultas al índice. De momento, dejaremos el problema del mantenimiento del índice como ejercicio para los lectores del blog. En nuestro portal de empleo deberemos preocuparnos del mantenimiento principalmente en dos puntos: cuando se crean nuevas ofertas de empleo y cuando se actualizan ofertas de empleo ya existentes. Si encuentras intersante este post o echas en falta una segunda parte, no dudes en dejar tu comentario y entonces escribo una segunda parte centrándome en el tema del mantenimiento.

A continuación copypasteo un fragmento de código de ejemplo que seguro te servirá para mantener tu índice. ¡Espero que te sirva de inspiración y lo puedas adaptar a tu solución particular!

0 comentarios

¿Me dejas un comentario? ¡Gracias!

Deja un comentario

Los campos obligatorios están marcados con *