Busquedas en MySQL usando FULLTEXT
(QR Code)Cuando realizamos una b&úacute;squeda de varios campos lo com&úacute;n es hacer una SELECT usando “Like“, pero MySQL nos provee otro método de b&úacute;squeda, para usar este método solo hemos de añadir la clave “FULLTEXT” a los campos que queremos que se usen en la b&úacute;squeda,FullText solo se admite en campos Varchar y TEXT (tinytext,smalltext,text,longtext).
Una vez configuradas las claves de los campos podemos realizar busquedas SQL usando un “SELECT Match”
Ej:
SELECT * FROM articulos WHERE MATCH (titulo,descripcion) AGAINST ('paella');
Esta sentencia buscara en titulo y descripción y nos devolverá todas las tuplas que contengan la palabra “paella”.
Hay que tener en cuenta que para buscar por titulo y descripción hay que tener tanto titulo como descripción en la misma clave (una clave para las 2 columnas), si creamos una clave para cada columna podremos buscar por una u otra de las columnas, pero para buscar por ambas los campos del match (en este caso titulo y descripción) han de tener una clave asignada para ellos en conjunto.
Otra opción que nos da este sistema de b&úacute;squeda es el ordenar las b&úacute;squedas por relevancia (como hace google), ya que la sentencia Match se puede poner también como un campo de la select, devolviendo un valor numérico que indica su grado de relevancia.
Ej:
SELECT
titulo,descripcion, MATCH (titulo,descripcion) AGAINST ('paella') as Score
FROM
articulos WHERE MATCH (titulo,descripcion) AGAINST ('paella')
ORDER BY
Score DESC;
Con esto devolveremos las tuplas ordenadas por su mayor a menor coincidencia con la b&úacute;squeda del usuario.
B&úacute;squedas en modo boleano
Opcionalmente se pueden realizar b&úacute;squedas boleanas añadiendo el modificador IN BOOLEAN MODE
Ej:
SELECT * FROM articulos WHERE MATCH (titulo,descripcion) AGAINST ('+paella -aceitunas' IN BOOLEAN MODE);
Con esto buscaremos todas las tuplas que contengan obligatoriamente “paella” pero no “aceitunas”
En la pagina de la documentación de MySQL encontrareis información de todos los modificadores
(http://dev.mysql.com/doc/refman/5.0/es/fulltext-boolean.html)
Tambien puede ser interesante la opcion de expansión de consulta (“expansión de consultas ciega”).
Para realizar la expansión de consulta deberemos realizar una primera consulta de fulltext y después una segunda consulta de expansión que dará resultados adicionales que cosidera relevantes. En la documentación de MySQL proponen el ejemplo de b&úacute;squeda de la frase “database” (base de datos). Si realizamos una primera consulta solo nos aparecerían las tuplas que contengan la palabra “database”, pero en una segunda consulta de expansión, añadiría todos los resultados relevantes, obteniendo datos de la primera consulta. Si por ejemplo en la primera consulta al buscar por database aparecen una gran cantidad de campos con la palabra “MySQL” asociada con “database”, en la segunda consulta aparecerán también todos los resultados que contengan “MySQL” aunque no contengan “database”
Este sistema también es &úacute;til si escribimos mal por ejemplo el nombre de un autor, imaginemos que queremos buscar “Antonio Jose Rodriguez” pero escribimos “Antonio Jose Roguez”, en la consulta de expansión aparecerían los resultados correctos ya que Rodriguez es una palabra asociada a “Antonio Jose” en nuestras tuplas. Todos estos datos se pueden tambien ordenar por relevancia, de forma que estén en los primeros puestos las b&úacute;squedas mas coincidentes y después aquellas similares.
Las b&úacute;squedas de texto completo por defecto no son sensibles a may&úacute;sculas, pero esto depende de el tipo de localización que usemos. Si por ejemplo usamos “latin1″ podemos cambiar a “latin1_bin” y se realizaría la distinción, may&úacute;sculas y min&úacute;sculas.
Para la información completa de las b&úacute;squedas FULLTEXT puedes mirar en la documentación oficial de MySQL
http://dev.mysql.com/doc/refman/5.0/es/fulltext-search.html
Nadie ha comentado (aun...)
No hay comentarios











