Vous êtes sur la page 1sur 5

SphinxSearch

SphinxSearch es un motor de búsqueda full-text, el cual proporciona una funcionalidad


de búsqueda rápida y relevante para el cliente. Está diseñada para integrase bien con
bases de datos SQL y ser accedida fácilmente por lenguajes script.
Cuando se tiene una gran cantidad de información es necesario estructurarla para que
sea posible recuperar dicha información rápida y eficientemente, tal es así para el
proyecto “Sociología en Internet”, en el cual es necesario almacenar grandes cantidades
de comentarios provenientes de redes sociales y sitios web de noticias. Como
consecuencia no es posible estructurar esta información solamente en una base de datos
relacional y recuperar dichos comentarios de forma tradicional.
Para hacer mucho más rápida la recuperación de comentarios se ha utilizado
SphinxSearch el cual trabaja en conjunto con una base de datos relacional (por ejemplo
Postgresql, MySql, MSSQL, etc.) y crea un índice externo sobre los comentarios
(específicamente sobre el campo textual de los comentarios).
Además de los índices sobre el texto de los comentarios (contenido del comentario) se
han aplicado otras funcionalidades que incluye SphinxSearch y que hacen mucho más
sencilla la recuperación de información, a continuación se describen dichas
funcionalidades y su aplicación:
Filtros del tipo Fecha
SphinxSearch posee la funcionalidad de crear filtros, en este caso del tipo fecha, lo cual
es muy útil en el proyecto ya que es necesario recuperar los comentarios por su fecha de
publicación (una vez que ya están en la base de datos e indexados), en la
Figura 1 se observa la configuración utilizada para establecer los filtros por fecha,
“sql_attr_timestamp” hace referencia a este filtro.

Filtros del tipo Entero-Flotante


Además de los filtros del tipo fecha, existen algunos otros como los del tipo entero y
flotante, estos filtros son muy importantes cuando queremos clusterizar la información
según algunos parámetros adicionales. Específicamente en el proyecto se utilizó para
dividir los comentarios según sus sentimientos: negativo, positivo y neutro, los cuales
fueron representados por -1,1 y 0 respectivamente.
Además se realizó una división por grupos de temas específicos los cuales podían
contener otros subtemas, este esquema es muy bien representado por valores numéricos
equivalentes a cada tema, dichos valores (enteros) han sido usados para establecer
filtros mediante SphinxSearch. Por ejemplo, puedo tener dos grupos: educación y
futbol, estos dos grupos serian representados por valores como 11 y 12.
En la
Figura 1 se puede observar la configuración realizada para establecer los filtros por
grupos y además los filtros por sentimiento, “sql_attr_uint” hace referencia a los filtros
de tipo entero.

Figura 1 Configuración de los campos conectados a la base de datos (índice


principal).

Ranking
Se usaron distintos tipos de Ranking ofrecidos por SphinxSearch, como por ejemplo
ordenar los resultados según la proximidad textual de los comentarios a nuestro query
de búsqueda, u ordenarlos por un contero simple de coincidencias. Esto ha permitido
realizar distintas pruebas en la recuperación de información.
Tipos de Búsqueda
Existen muchos tipos de búsqueda entre las cuales la más restante es la “búsqueda
exacta” la cual solo recupera aquellos comentarios que contengan la frase exacta que se
busca. Adicionalmente a este tipo de búsqueda se ha utilizado un tipo de búsqueda
basado en expresiones regulares para búsquedas de múltiples términos.
Índice incremental
Esta es una de las partes más importantes, ya que SphinxSearch no actualiza el índice
por sí solo, entonces se utilizó los índices incrementales, lo que significó crear dos
índices, uno que se actualiza una vez al día (el cual contiene el grueso de comentarios) y
otro que se actualiza cada 2 a 5 minutos, lo que nos permite tener los comentarios
indexados con un máximo de 5 minutos de retraso.
Para hacer posible este esquema se utilizó una tabla llamada “sph_counter” en la cual se
guarda el identificador del último comentario indexado por el índice principal, de esta
manera el índice delta (el que se actualiza cada 2 a 5 minutos) solo indexa los
comentarios restantes, en la Figura 1 se puede observar la configuración del índice
principal, mientras que en la Figura 2 la configuración del índice delta.

Figura 2 Configuración de los campos conectados a la base de datos (índice


delta).

Luego de hacer todas las configuraciones necesarias fue necesario utilizar el API de
SphinxSearch disponible para Python. En la Figura 3 se muestra el uso de SphinxSearch
mediante el uso del API de Python, se establecen los parámetros de conexión, el límite de
comentarios a recuperar, el tipo de búsqueda (en este caso “4” equivale al tipo de búsqueda
mediante expresiones regulares) y el criterio de ordenamiento (en este caso por fecha); además
se muestra el uso de los filtros por fecha que se configuraron.

Figura 3 Uso de SphinxSearch mediante el API de Python.


PostgreSQL
PostgreSQL es un sistema de gestión de bases de datos objeto-relacional. Es el sistema
de gestión de bases de datos de código abierto más potente del mercado y en sus
últimas versiones no tiene nada que envidiarle a otras bases de datos comerciales.
Adicionalmente a SphinxSearch se eligió PostgreSQL como motor de base de datos
debido a que es software libre y su fácil integración. Se construyó un modelo relacional
muy parecido al modelo original realizado a principio del proyecto para almacenar los
comentarios recuperados por el crawler.
Para la integración con SphinxSearch la única tabla importante es la que almacena todos
los comentarios, esta tabla es llamada “Comentarios” y contiene los siguientes campos
descritos a continuación:
• id_comentario: identificador único del comentario.
• contenido: contenido del comentario.
• fecha: fecha de publicación del comentario.
• url: dirección web en la cual se encuentra disponible el comentario.
• id_grupo: grupo al que pertenece el comentario (tema).
• sentimiento: sentimiento del comentario (1,-1,0 respectivamente según sea
positivo, negativo o neutro)
Luego de establecido el modelo relacional se realizó la integración con SphinxSearch, la
cual consiste en direccionar el nombre de la base de datos, la tabla y los campos a
indexar (los campos textuales y aquellos en los que se establecieron filtros) en un
archivo de configuración.
Cabe señalar que lo que hace SphinxSearch es devolver los identificadores únicos de los
comentarios que se encuentran en el conjunto de resultados, luego de esto es necesario
recuperar cada comentario individualmente por su identificador único: id_comentario.

Proxmox
Proxmox VE es una solución completa de virtualización de servidores basada en
sistemas de código abierto. Permite la virtualización tanto sobre KVM (Máquina
virtual basada en el núcleo) como contenedores, y gestiona máquinas virtuales,
almacenamiento, redes virtualizadas y clústeres HA (clústeres de alta disponibilidad).
Se utilizó Proxmox para convertir una máquina del Centro de Investigación en Ciencia
de la Computación en un clúster de máquinas virtuales, específicamente tres máquinas
virtuales ya que dicha computadora cuenta con 4 núcleos, 3 núcleos destinados para
máquinas virtuales y uno para su administración.
Esta virtualización se realizó con el fin de utilizar SphinxSearch como un modelo
distribuido, es decir una maquina se encargaba de la ejecución de SphinxSearch, la
segunda se encargada de la base de datos y la última del funcionamiento del crawler que
recuperaba los comentarios de redes sociales.
A futuro es posible utilizar Proxmox para incrementar el número de máquinas virtuales
(agregando más maquinas físicas) de esta manera se incrementaría el número de
máquinas que corren SphinxSearch aumentando la escalabilidad del modelo.

Vous aimerez peut-être aussi