martes, 28 de febrero de 2012

Buscador Fulltext de MySQL vs Google Site Search

Dado que últimamente he trabajado mucho con buscadores por motivos de trabajo me ha tocado investigar bastante y pelearme con ellos. Después de conocer diversas opciones y haber trabajado mucho con Sphinx decidí que ya iba siendo hora de instalar un buscador en la web de Saberpsicología.

Inicialmente pensé en utilizar Google, una de las opciones que me barajé fue la de invocar una búsqueda sobre Google mediante Ajax. Aunque es una opción, me parecía complicar demasiado el código y además que los enlaces que Google te devuelve no son siempre los deseados pues en ocasiones devuelve algún enlace que no es del sitio que buscas.

Investigando descubrí que Google te ofrece un sistema para utilizar su buscador. Google Site Search. Como cabría de esperar, tiene dos tipos de cuenta: Gratuita con publicidad y de pago. Aunque la búsqueda de Google es casi insuperable, la cuenta de pago es bastante cara y no compensa para un sitio pequeño como Saberpsicología. Por otro lado, la cuenta gratuita incluye demasiada publicidad para mi gusto, por lo que no me decidí a montarlo. No obstante he de decir que en las pruebas de integración que realicé me resultó muy fácil el instalar Site Search, además de estar muy bien documentado.

Me hubiera gustado instalar un Sphinx pues es muy potente y aunque algo complicado de integrar como ya he trabajado bastante con él lo tengo más o menos dominado, pero el hosting donde tengo alojada la web, no me permite instalar servicios adicionales por lo que me quedé con las ganas.

Hace poco descubrí que el propio MySQL incluye un motor de búsqueda Fulltext. Aunque no es tan potente como Sphinx, ni tan rápido, no da malos resultados y para el caso en que lo necesitaba.

Os explicaré a grandes rasgos como se realiza la integración. El motor de búsqueda Fulltext solo puede correr sobre las tablas de tipo MyISAM, en mi caso utilizaba una tabla InnoDB, por lo que tuve que cambiar el motor de la tabla, esto es:

ALTER TABLE posts ENGINE=MyISAM;

Una vez cambiado el motor de búsqueda deberemos especificar un índice de búsqueda:

ALTER TABLE posts ADD FULLTEXT(body);

Y ya está creado el índice Fulltext en la tabla. Ahora podremos realizar búsquedas haciendo una consulta sencilla, utilizando los operadores MATCH ... AGAINST

SELECT * FROM posts WHERE MATCH(body) AGAINST('hola mundo');

De nuevo como comenté anteriormente este motor de búsqueda interno no se acerca ni de lejos a la potencia de Sphinx, pero es una buena aproximación para sitios pequeños como Saberpsicología. Finalmente comentaré que revisando el Analytics he visto que ya se está utilizando el buscador, así que la integración ha sido todo un éxito.

No hay comentarios:

Publicar un comentario