Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

¿Como buscar una Frase Exacta en mi base de datos?

Estas en el tema de ¿Como buscar una Frase Exacta en mi base de datos? en el foro de Mysql en Foros del Web. Hola amigos del Foro No se mucho sobre PHP ni MySQL pero creo que este es un problema simple de resolver. Tengo una tabla de ...
  #1 (permalink)  
Antiguo 19/02/2012, 12:13
 
Fecha de Ingreso: marzo-2009
Mensajes: 61
Antigüedad: 15 años, 1 mes
Puntos: 2
Exclamación ¿Como buscar una Frase Exacta en mi base de datos?

Hola amigos del Foro

No se mucho sobre PHP ni MySQL pero creo que este es un problema simple de resolver.

Tengo una tabla de datos, muy simple, pero tiene como 200,000 registros, por tanto necesito que sea lo más exacto posible en los resultados. Digamos que estoy buscando un libro, se llama: Critical Thinking Introduction Alec Fisher

Pero si en mi buscador yo escribo: Alec Fisher
me aparecen resultados como: Fisher Price

Y el resultado que quiero, aparece más allá del lugar 100

¿Como hago para que de preferencia a los resultados donde aparezcan las palabras juntas?

Si el buscador diera preferencia a los resultados donde aparecen las palabras juntas, el resultado de Critical Thinking Introduction Alec Fisher sería el primero

Estoy usando esta sentencia

SELECT * FROM 449_FIRST_TABLE WHERE MATCH (ROUTETXT,TITLETXT) AGAINST ('$term')

Muchas Gracias por su atención
  #2 (permalink)  
Antiguo 19/02/2012, 17:39
 
Fecha de Ingreso: marzo-2009
Mensajes: 61
Antigüedad: 15 años, 1 mes
Puntos: 2
Respuesta: ¿Como buscar una Frase Exacta en mi base de datos?

Porfavor, denme sugerencias para armar la sentencia, yo las pruebo, no importa si a la primera no sale, pero alguien que me ayudeeee, Gracias!!!!!!!!!!!
  #3 (permalink)  
Antiguo 19/02/2012, 17:43
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: ¿Como buscar una Frase Exacta en mi base de datos?

Ayer fue sábado. Hoy es domingo....
La gente tiene vida familiar, en ocasiones, ¿sabes?

Armate de paciencia.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 19/02/2012, 17:46
 
Fecha de Ingreso: marzo-2009
Mensajes: 61
Antigüedad: 15 años, 1 mes
Puntos: 2
Respuesta: ¿Como buscar una Frase Exacta en mi base de datos?

"en ocasiones"
  #5 (permalink)  
Antiguo 19/02/2012, 23:04
 
Fecha de Ingreso: marzo-2009
Mensajes: 61
Antigüedad: 15 años, 1 mes
Puntos: 2
Respuesta: ¿Como buscar una Frase Exacta en mi base de datos?

Hola!

Bueno, tengo esto casi resuelto al 80% o más, si alguien tiene mejores sugerencias se los agradeceré en infinito.
Al menos ya logré obtener el resultado que quería.

Al buscar: Alec Fisher
ya me aparece como primer resultado: Critical Thinking Introduction Alec Fisher y después los demás de Fisher Price

Que es exactamente lo que quería, esto lo resolví con esta sentencia:
(como ya vieron la tabla se llama: 449_FIRST_TABLE y ROUTETXT y TITLETXT son los campos donde estoy buscando, y obviamente $term es el nombre de lo que se pone en la casilla de búsqueda, disculpen que me exprese así es que soy totalmente autodidacta en esto )

SELECT * from 449_FIRST_TABLE where ROUTETXT like '%$term%' or TITLETXT like '%$term%' UNION SELECT * FROM 449_FIRST_TABLE WHERE MATCH (ROUTETXT,TITLETXT) AGAINST ('%$term%')

Como pueden ver lo arreglé poniendo primero un LIKE y después las sentencia con MATCH y funciona muy bien.

Sólo hay un pequeño detalle
Recordemos que mi búsqueda es "Critical Thinking Introduction Alec Fisher"

El buscador toma en cuenta el orden de las palabras, es decir, si yo busco: "Alec Fisher" o "Critical Thinking" o incluso "Thinking Introduction" todo está bien, pero esto es porque como pueden ver, esas palabras están exactamente en ese orden en el registro

Pero si busco: Fisher Alec
nuevamente me devuelve los resultados de Fisher Price, si se cambia el orden, ya no lo encuentra...

¿Habrá alguna forma de que no considere el orden de las palabras e intente buscar todas en un mismo registro? o en otras palabras ¿Hacer que primero muestre los registros que incluyen todas las palabras de búsqueda sin importar el órden?

Gracias!
  #6 (permalink)  
Antiguo 20/02/2012, 07:23
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: ¿Como buscar una Frase Exacta en mi base de datos?

11.9.1. Natural Language Full-Text Searches

repasa el manual a ver si te sirve ese "score" que calcula MATCH ... AGAINST


Ese like "%frase%" no es una buena solucion por lo que has visto si la frase cambia de orden no es la misma frase, el like con los % busca la frase exacta con o sin algo delante y detras (ese es el significado de los %).


Intenta tenerla ....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #7 (permalink)  
Antiguo 22/02/2012, 22:35
 
Fecha de Ingreso: marzo-2009
Mensajes: 61
Antigüedad: 15 años, 1 mes
Puntos: 2
Respuesta: ¿Como buscar una Frase Exacta en mi base de datos?

Bueno, logré solucionar todo con este script que armé con un poco de aquí y un poco de allá, no es perfecto, tienes sus detalles, como que no da mucha importancia a palabras con 3 caracteres o menos y cosas así... Pero funciona bastante bien, encuentra sin importar el orden de las palabras y da preferencia primero a los resultados que contienen todas las palabras buscadas (en la mayoría de los casos)

SELECT * , MATCH(T1, T2) AGAINST ('$term') as Score

FROM 449
WHERE MATCH(T1, T2) AGAINST ('$term')



UNION



SELECT * , MATCH(T1, T2) AGAINST ('$term') as Score

FROM 501
WHERE MATCH(T1, T2) AGAINST ('$term')

UNION



SELECT * , MATCH(T1, T2) AGAINST ('$term') as Score

FROM 502
WHERE MATCH(T1, T2) AGAINST ('$term')



ORDER BY Score DESC



En mi caso uní 3 tablas que son idénticas pero que tuve que separar por cuestiones de peso, T1 y T2 son las columnas en las que se buscará, no olvidar que deben tener sus índices FULLTEXT, y bueno 501, 502, 449 las tablas a buscar...

Y bueno, como en mi caso se trata de un buscador, $term equivale a lo que se escribe en la casilla de búsqueda...

Espero que a alguien le sirva y construya cosas buenas... el karma es el karma

luisdelbar • • •

Etiquetas: frase, php, registros, select, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:21.