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

consulta con fulltext y match against

Estas en el tema de consulta con fulltext y match against en el foro de Mysql en Foros del Web. Gente: tengo una consulta que me arroja resultados que no quiero... no sé si alguien podrá indicarme cómo mejorarla: Código: SELECT * FROM productos WHERE ...
  #1 (permalink)  
Antiguo 28/01/2010, 09:16
Avatar de arielcasanova  
Fecha de Ingreso: octubre-2004
Ubicación: Bahía Blanca - Argentina
Mensajes: 332
Antigüedad: 19 años, 6 meses
Puntos: 1
consulta con fulltext y match against

Gente: tengo una consulta que me arroja resultados que no quiero... no sé si alguien podrá indicarme cómo mejorarla:

Código:
SELECT *
FROM productos
WHERE sistema LIKE '%sistema digestivo%'
AND MATCH (
nombre, palabras_clave, descripcion, beneficios, composicion
)
AGAINST (
'aceite de primula'
)
Y me devuelve productos que contienen la palabra "aceite" y no contienen la palabra primula.

¿alguna idea de qué estoy hacendo mal?

Tengo un índice fulltext creado así:
buscar FULLTEXT
nombre
descripcion
beneficios
composicion
palabras_clave


Agradeceré cualquier ayuda.
__________________
Ariel Casanova
diseño y desarrollo web estratégico
www.emporia.com.ar
  #2 (permalink)  
Antiguo 28/01/2010, 16:58
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: consulta con fulltext y match against

Ariel,
No estás haciendo nada mal. Eso es lo que hace una búsqueda FULL TEXT en lenguaje natural, te busca y te muestra como primer resultado cuando aparecen ambas palabras (el 'de' no es buscado) y en ese orden; luego las dos en orden distinto, luego una, y otra, es decir, ofrece resultados para todas esas posibilidades. Si quieres hacer una búsqueda exacta o controlar mejor el los resultados de aplicar el índice full text, usa la búsqueda booleana.
http://dev.mysql.com/doc/refman/5.0/...t-boolean.html
  #3 (permalink)  
Antiguo 29/01/2010, 06:37
Avatar de arielcasanova  
Fecha de Ingreso: octubre-2004
Ubicación: Bahía Blanca - Argentina
Mensajes: 332
Antigüedad: 19 años, 6 meses
Puntos: 1
Respuesta: consulta con fulltext y match against

Gracias Jurena.
Lo investigo y luego te cuento!
__________________
Ariel Casanova
diseño y desarrollo web estratégico
www.emporia.com.ar
  #4 (permalink)  
Antiguo 29/01/2010, 07:02
Avatar de arielcasanova  
Fecha de Ingreso: octubre-2004
Ubicación: Bahía Blanca - Argentina
Mensajes: 332
Antigüedad: 19 años, 6 meses
Puntos: 1
Respuesta: consulta con fulltext y match against

Jurena: la consulta me quedó así:

Código:
SELECT * FROM productos	WHERE MATCH (nombre,palabras_clave,descripcion, beneficios, composicion) AGAINST ('+aceite +de +primula' IN BOOLEAN MODE) order by nombre asc
y funciona correctamente. Ahora me resta ver cómo hago un array con explode o algo así para ponerle el + antes de cada palabra que se pasa en el campo "buscar" del formulario, pero eso es harina de otro costal.
.

Pero ya que estoy por aquí, hago otra pregunta:
cuando en el campo "buscar" se introduce más de una palabra, el sistema ejecuta la consulta anterior. Pero cuando es sólo una palabra, le hago que ejecute ésta consulta:

Código:
SELECT * FROM productos WHERE  $sqla (nombre LIKE '%termino%' OR palabras_clave LIKE '%termino%' or descripcion LIKE '%termino%' OR beneficios LIKE '%termino%' or composicion LIKE '%termino%') order by nombre asc
El tema es que esto busca palabras que no son completas. Es decir, si alguien busca la palabra "mina", le aparecen todos los productos que digan vitamina, por el uso de los % al principio y final de la variable, y no quiero eso.
Pero sí quiero que si pone "vitamina" le aparezcan los términos que digan "vitaminas" y "pro-vitamina" por ejemplo... Es demasiado complicado no? quizá sea algo para programar con php y luego pasar en la consulta.

¿alguna sugerencia?
__________________
Ariel Casanova
diseño y desarrollo web estratégico
www.emporia.com.ar
  #5 (permalink)  
Antiguo 29/01/2010, 07:03
Avatar de arielcasanova  
Fecha de Ingreso: octubre-2004
Ubicación: Bahía Blanca - Argentina
Mensajes: 332
Antigüedad: 19 años, 6 meses
Puntos: 1
Respuesta: consulta con fulltext y match against

se me ocurre ahora... no sé, que en vez de %termino% hubiera algo que pueda indicar un carácter más a la derecha y uno más a la izquierda del término de búsqueda solamente... ¿podría ser?
__________________
Ariel Casanova
diseño y desarrollo web estratégico
www.emporia.com.ar
  #6 (permalink)  
Antiguo 29/01/2010, 11:56
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: consulta con fulltext y match against

Podrías usar expresiones regulares REGEXP. Existen también en MySQL y para la búsqueda de una palabra y su plural (añadido de una o dos letras, sin contar excepciones y cambios de acento) y el añadido de un prefijo con guión, lo podrías conseguir sin mucha dificultad, pero antes deberías contemplar todas las posibilidades sobre las que trabajas. Echa un vistazo aquí.
http://dev.mysql.com/doc/refman/5.0/es/regexp.html

Ariel, piensa que estas consultas devuelven 1 cuando se cumple la condición, y 0 cuando no.
Por ejemplo, para encontrar vitamina, vitaminas, pro-vitamina, pro-vitaminas, podrías usar esto:
SELECT * FROM tabla WHERE termino REGEXP '[[:<:]]vitamina[s|es]*[[:>:]]'= 1

Las expresiones regulares se usan también en PHP.
  #7 (permalink)  
Antiguo 01/02/2010, 14:18
Avatar de arielcasanova  
Fecha de Ingreso: octubre-2004
Ubicación: Bahía Blanca - Argentina
Mensajes: 332
Antigüedad: 19 años, 6 meses
Puntos: 1
Respuesta: consulta con fulltext y match against

mil gracias jurena.
lo voy intentando
__________________
Ariel Casanova
diseño y desarrollo web estratégico
www.emporia.com.ar

Etiquetas: fulltext, match
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 02:40.