El motor de búsqueda

SPIP integra un motor de búsqueda desactivado por defecto. Cuando se activa este motor, desde la página de configuración, por alguna persona con rango de administradora, permite efectuar búsquedas sobre diferentes tipos de información presente en la base de datos: artículos, secciones, breves, palabras clave y autores/as. Desde SPIP 1.7.1 se indexan, igualmente, los hilos de discusión de los foros (threads) y las firmas de las peticiones.

Principio

Existen principalmente dos maneras para hacer un motor de búsqueda. La primera es buscar simple y directamente en la información tal cual está almacenada (ficheros HTML, base de datos,... según el tipo de sitio). Dicho método es muy lento, ya que el tipo de almacenamiento no está específicamente previsto para ello.

El segundo método que fue elegido para SPIP (y que es también el de todos los motores de búsqueda profesionales), consiste en establecer un modo de almacenamiento específico a las necesidades de la búsqueda. Por ejemplo, se puede guardar directamente la puntuación de cada palabra de un artículo con el fin de que se recupere fácilmente, y así obtener la puntuación total de una búsqueda mediante una simple suma. La ventaja es que la búsqueda es muy rápida: casi tan rápida que como cualquier otro cálculo de página. El inconveniente es que se hace necesaria una fase de construcción y de almacenamiento de dicha puntuación: esto se denomina indexación. La indexación tiene un coste en términos de recursos (tiempo de cálculo y espacio en el disco), e introduce igualmente una ligera diferencia temporal entre el añadido o la modificación de un contenido y la repercusión de este añadido o de esta modificación en los resultados de búsqueda.

Por otro lado, en el caso de SPIP, estamos obligados a utilizar PHP y MySQL al igual que en el resto del programa, lo que no permite realizar un motor muy optimizado en cuanto a rapidez, ni tampoco en cuanto a precisión u otros añadidos diversos (indexación de documentos externos al sitio, creación de campos semánticos que permitan ofrecer búsquedas más precisas, etc.).

La ventaja del motor interno, sin embargo, es que permite gestionar la publicación de los resultados a través de los mismos métodos (esqueletos) que el resto de páginas de SPIP, y dentro de un mismo entorno visual.

La indexación

La indexación se realiza durante las visitas al sitio público.Para evitar que la acumulación de una indexación y un cálculo de página lleve a un timeout (tiempo excedido) en servidores particularmente lentos, SPIP espera a que una página se muestre utilizando la copia de la caché [1].

La indexación trata uno a uno los diferentes datos textuales de un contenido dado: por ejemplo, para un artículo la entradilla, el descriptivo, el título, el texto... Para cada dato textual la puntuación de cada palabra se calcula simplemente contando el número de apariciones. A este efecto, se ignoran las palabras de tres caracteres o menos (la mayoría no son significativas, y hacen más pesada la base de datos); por otro lado, los caracteres acentuados son transliterados (convertidos en sus equivalentes no acentuados) para evitar los problemas de juegos de caracteres y también para permitir efectuar búsquedas en versión no acentuada (en caso de teclado no adaptado...).

Inmediatamente después, las puntuaciones de cada palabra se acumulan de manera ponderada entre los diferentes datos textuales del contenido indexado. La ponderación permite, por ejemplo, dar más peso a las palabras contenidas en el título de un artículo que en el cuerpo del texto o el post-scriptum...

Las funciones de indexación pueden ser estudiadas dentro del archivo ecrire/inc_index.php3. Para ver mejor la dinámica de indexación del sitio, puedes abrir el fichero ecrire/data/spip.log, o también ver la páginaecrire/admin_index.php3 (nota: esta página, aún experimental, no está incluida en todas las versiones de SPIP, y sólo existe en francés. Se ha retirado de [SPIP 1.9] y ahora está disponible en el plugin recherche_etendue junto a otras funciones de gestión de la indexación).

En la versión [SPIP 1.6], se han introducido importantes modificaciones en el comportamiento del motor:
-  mejor comportamiento en un entorno multilingüe;
-  el guión bajo (underscore) ya no está considerado como un separador de palabra sino como un carácter alfabético (útil para la documentación informática).
-  las palabras de dos letras (y más) que sólo contienen mayúsculas y cifras son consideradas como siglas y son indexadas, lo que elimina uno de los principales inconvenientes de la limitación de la indexación a palabras de más de 3 letras (G8, CNT, ONU son por tanto, indexadas).

La búsqueda

La búsqueda se efectúa simplemente dividiendo el texto de búsqueda en sus diferentes palabras; se aplica el mismo filtro que durante la indexación: supresión de las palabras de tres letras o menos (salvo las siglas) y conversión de los caracteres acentuados.

Por cada contenido de búsqueda se recupera y luego se suma la puntuación de las diferentes palabras para obtener la puntuación total. Finalmente, se muestran en general por orden decreciente de puntuación ({par points}{inverse}); es decir, de pertinencia (pero esto se deja a voluntad de la persona que escribe los esqueletos de paginación).

Prestaciones

Rapidez

En un servidor reciente y no muy cargado la indexación de un texto largo (varios decenas de millares de caracteres) necesitará entre uno y dos segundos: la espera es casi imperceptible comparada con el tiempo de carga a través de la red. Los contenidos cortos son indexados de manera casi instantánea. Por supuesto, estas afirmaciones deben condicionarse al tamaño del sitio. Un sitio realmente grande corre el riesgo de ver cómo el tiempo de búsqueda se amplía ligeramente; para relativizar señalemos que un sitio como Le Courrier des Balkans tiene, en la fecha de escritura de este texto, unos 3.800 artículos publicados, y más de 7.500 mensajes en el foro, y que el motor de búsqueda de SPIP no muestra ningún síntoma de debilidad.

Por otro lado, estadísticamente, se puede considerar de manera aproximada que cada contenido sólo será indexado una sola vez: teniendo en cuenta que existe en general muchas más visitas en un sitio que de actualización de contenidos, el aumento de carga del servidor es poco considerable (salvo en caso de máquinas muy lentas).

Calidad

La calidad de indexación es más floja que en motores de búsqueda profesionales. Al ser PHP un lenguaje bastante lento, la fase de extracción de palabras ha tenido que simplificarse al máximo para que los tiempos de indexación sean mínimos. Por consiguiente, los datos de indexación incluyen algunos «residuos», es decir, trozos de texto que no corresponden a «verdaderas» palabras; pero que han sido indexadas como tales (se trata a menudo de contenidos técnicos como los nombres de ficheros o de pasajes con mala ortografía). El ejemplo de uZine (donde hemos constatado en torno a un 2 % de tales «residuos») nos permite pensar que estos datos son una cantidad poco considerable, además de que existen pocas posibilidades de que produzcan un resultado positivo en una búsqueda.

En cuanto a la búsqueda, es simplemente aditiva: no hay operadores booleanos, el operador implícito es a grosso modo un «O» lógico. Sin embargo, desde SPIP 1.7.1, los artículos encontrados se muestran ordenados según los resultados que contengan más palabras con la ortografía más aproximada a la búsqueda. Por ejemplo, una búsqueda de «sobre el euro» devolverá los artículos que contengan «sobre» y «euro» antes que los que contienen «sobrecarga» y «Europa», que aparecerán más abajo en la clasificación.

Espacio en el disco

Dado que MySQL no está especialmente concebido para el almacenamiento de datos indexados, la utilización del motor de búsqueda tiene tendencia a incrementar mucho el espacio del disco utilizado por la base de datos. Para precisar un poco más podríamos decir que un contenido genera datos de indexación de un tamaño comprendido entre el tamaño del contenido y el doble del mismo. Es decir, excluyendo los datos que no se incluyen en la indexación (los foros, por ejemplo), puede calcularse que la indexación dobla o triplica el tamaño de la base de datos. Esto puede ser molesto si el sitio que tienes es muy escaso.

Si alguna vez desactivas el motor de búsqueda con el fin de economizar espacio en el disco, no olvides a continuación borrar los datos de indexación (en la página de salvaguarda/restauración de la base de datos) con el fin de liberar realmente el espacio del disco ocupado por estos datos.

Notas

[1Por lo tanto, si has puesto todos los $delais a cero, o si tu sitio no tiene visitas (sitio de pruebas), la indexación no se llevará a cabo.

Autor o autora mboix Publicado el: Actualizado: 26/10/12

Traducciones: عربي, català, English, Español, français, italiano, Nederlands, українська