Stanmx

Buscando la accesibilidad

Que es mejor, un LIKE o un FULLTEXT

Publicado en mysql programacion el 22/06/05 a las 04:39 am

Bueno, son altas horas de la madrugada y no me he despegado de la modificación de la estructura del sitio. Aun tengo cosas pendientes, como el MOD_REWRITE, las COOKIES y los MULTITAGS para cada post. Y por supuesto el BUSCADOR que es el motivo que me hace escribir este post.

He estado investigando sobre el BUSCADOR y las primeras pruebas las hice con un buscador generico pero no me gusto asi que continue la busqueda, despues segui con un buscador de palabras bastante sencillo, el cual he tomado como base para irlo robusteciendo.

Pero las dudas surguieron al leer este articulo de Programando un buscador con PHP y MySQL. Pues en el cambian el elemento LIKE por un FULLTEXT, esto con el proposito de hacerlo mas rapido.

Consulte las referencias del articulo y llegue a Full Text Search en MySQL donde explica el autor los beneficios de FULLTEXT sin embargo tambien los contras, como no poder buscar palabras menores de 4 caracteres.

Que tal si quiero buscar algo en el blog sobre PHP o XUL, el buscador te dira Lo siento chico, pero eso no lo tengo yo (ese seria mi mensaje personalizado jajaja).

Bueno, abusando de que tengo varios lectores expertos en la materia de programación PHP/MySQL, redacto este post para pedirles su opinión y consejo.

Por cierto ando haciendo algunas pruebas con los TAGS, asi que espero no haya ningun problema por que escriba 2 distintos :P

Post relacionados

15 comentarios

theNinjaBunny

dijo el 22/06/05 a las 06:07 am

Pues parece que la idea es simple, pon un condicional, si la palabra es mayor de 4 caracteres pues usas fulltext, si no el "like"... aun asi espero que el buscador lo sakes libre y lo podamos usar el resto...

JEL

dijo el 22/06/05 a las 09:11 am

Justamente iba a sugerir un mix entre ambos. =)

fael

dijo el 22/06/05 a las 10:07 am

geez.. se enviaron los comentarios sin querer
personalmente no he usado fulltext ni tengo idea qu? es, yo en mi buscador separo las palabras, elimino las stopwords y uso una sentencia sql de like.
pero como dices, no hay nada mejor que experimentar, ojal? tambi?n publiques el c?digo.
suerte, un saludo.

Pablo Viojo

dijo el 22/06/05 a las 12:42 pm

De acuerdo con fael, yo usaria LIKE, pero es cuestion de gustos m?s bien. aparte podr?as optimizar la busqueda de modo que aparezcan primero los post que tengan el string buscado el el titulo, y luego los que lo contengan en el post.

Hermann

dijo el 22/06/05 a las 01:15 pm

Lo valores de control de FULLTEXT se pueden cambiar, pero depende del control que tengas sobre el servidor: http://dev.mysql.com/doc/mysql/en/fulltext-fine-tuning.html

Fer

dijo el 22/06/05 a las 03:12 pm

Depende del tipo de tablas que tengas tambien, si tienes tablas tipo MyIsam muy recomendable utilizar busqueda FULLTEXT, las ventajas son muchas, como ya habras leido por ahi. Si tienes tablas tipo Innodb porque tienes llaves foraneas para respetar la integridad referencial, entonces pues si no te queda de otra mas que usar LIKE y partir la frase de busqueda en palabras. En resumen usa LIKE si no te queda de otra.

Diego

dijo el 22/06/05 a las 10:13 pm

Nunca use FullText, pero tenia entendido que "la" ventaja, era la posibilidad de buscar mas de un termino, osea, busca los posts que contengan las palabras 'xxxxxx' y 'yyyyyyy'.
Cosa que con LIKE es imposible.

Creo que esa era la diferencia entre ambos.

Stan

dijo el 23/06/05 a las 11:09 am

Bueno, algo que he descubierto con LIKE (que es el que estoy probando actualmente), es que te despliega todo lo que tenga la palabra que estas buscando, ahora, lo que promete el FULLTEXT es buscar frases completas, o dialogos, pero para eso le tienes que dar formato a los campos que van a participar en la busqueda, en este caso, titulo y contenido.

Voy a investigar entonces como personalizar LIKE, pues como dije, el inconveniente de FULLTEXT es no encontrar palabras menores de 4 letras, y aun no estoy seguro si se puede hacer un mix.

Como tampoco se si le doy el formato FULLTEXT a los campos, titulo y contenido, si estos ya no podran funcionar con el LIKE.

Son detalles que aun me faltan investigar, y si les contesto hasta ahora, es por que ayer llegue bastante cansado y estoy sufriendo los problemas de no utilizar la ergonomia en mi mano izquierda :S

Asi que me tome un rest de la pc ayer :P

okeimakei

dijo el 23/06/05 a las 07:08 pm

Ya me maree.Demonios demoniacos,no saben las ganas que tengo de saber que es todo esto.Me voy a meter a investigar!

giropau

dijo el 22/03/06 a las 07:12 am

he estado trabajando con esto y me he encontrado con algunos problemas. no se si son cosa o ya les ha pasado alguna vez, aqui los expongo:
-si la tabla tiene menos de 3 registros no devuelve nada
-si la palabra o frase buscada esta en mas de 1 registro diferentes tampoco me devuelve nada.

estoy usando mysql, haber si a alguien le ha pasado o sabe pq pasa
gracias

giropau

dijo el 23/03/06 a las 02:57 am

No se como explicarlo pero el problema se soluciono sin hacer nada. Simplemente cerre el ordenador y al dia siguiente ya funcionaba. Si alguien sabe pq paso esto se lo agradeceria mucho.

Sonic22

dijo el 20/04/07 a las 02:43 pm

Para solucionar el tema de buscar menos de 4 caracteres lo que se puede hacer es usar AGAINST ('lo que buscamos' IN BOOLEAN MODE).

Por el problema que comenta giropau puede ser que los campos al ser BLOB o TINYBLOB no muestra el comportamiento deseado, deben ser TEXT, TINYTEXT o VARCHAR.

Pero como tambien dice que prendio la pc al otro dia y se soluciono... un campo no se cambia solo XD.
si no es eso no se que podra ser, a mi me esta pasando lo mismo, pero no me fije si era TEXT, TINYTEXT o VARCHAR.. XD

Sonic22
We'll be the "sons of liberty"

fulanito

dijo el 04/05/07 a las 02:23 am

Buenas,
Mi problema es que tengo un INDEX FULLTEXT llamado buscar en el que están incluidas 4 columnas, tres de ellas VARCHAR y una TEXT, de una misma tablas. Hasta ahí normal, pero cuando hago el MATCH(campo1, campo2,campo3,campo4) AGAINST(%S%) me da error..., pero si quito la columna de tipo TEXT del INDEX FULLTEXT sí funciona, en cambio si la incluyo no funciona. Me gustaría que hiciera la búsqueda también en la columna TEXT, pero no sé por qué parecen incompatibles los VARCHAR con el TEXT.

Nota: %s% es la variable que pasa el dreamweaber

compuglobal

dijo el 12/05/07 a las 02:05 pm

Si se quieren hacer consultas de texto completo lo mejor es usar herramientas indexer/searchers externas. Ahora mismo para mysql lo mejor que hay es sphinx.

El motor fulltext de mysql tiene un rendimiento decente mientras una tabla no sea grande.

Si os interesa el tema fulltext disponeis un manual de instalacion y configuración de sphinx en castellano y también un ejemplo completo de buscador de wikipedia hecho con esta herramienta.

Un saludo

Luigi Salas

dijo el 30/06/07 a las 07:51 pm

Yo programo mis buscadores creando los indices (FULLTEXT) en mis tablas para el titulo y contenido, y siempre en mis sentencias SQL lo hago en BOOLEAN MODE... y a los resultados los asigno como puntos segun las la existencia de las palabras o frases buscadas... al contener mas veces las palabras, mas puntos y los muestro de forma desendente segun los puntos... el problema que me surgio es que cuando buscaban 1 sola palabra el resultado no era el deseado... por lo cual, opte por primero hacer una relacion, si buscan una sola palabra, uso LIKE y si colocan mas de una palabra en la busqueda uso FULLTEXT en BOOLEAN MODE...

Estoy buscando robustecer mas las busquedas pero al momento esto me trabaja muy bien... puedo usar " (comillas) para buscar frases exactos, agregar palabras o eliminar palabras de las busquedas anteponiendo - o +, y o cosas asi... algo similar a las opciones de busquedas que podemos aplicar en google :)

Salud!

Aporta tu comentario

Tu Email no sera publicado.

Opcional.