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

Fulltext con trozos de palabras

Estas en el tema de Fulltext con trozos de palabras en el foro de Mysql en Foros del Web. Saludos Cordiales Quiero llevar esto: select campo from table where campo like '%pite%' a esto: select campo from table where MATCH (campo) AGAINST ('pite' IN ...
  #1 (permalink)  
Antiguo 19/07/2010, 10:22
Avatar de José Molina  
Fecha de Ingreso: enero-2002
Ubicación: USA
Mensajes: 768
Antigüedad: 22 años, 10 meses
Puntos: 1
Fulltext con trozos de palabras

Saludos Cordiales

Quiero llevar esto:

select campo from table where campo like '%pite%'

a esto:

select campo from table where MATCH (campo) AGAINST ('pite' IN BOOLEAN MODE)

En el primer ejemplo usando el LIKE me trae los registros donde CAMPO contenga (pite) = Jupiter, sapiter, pite1, pite2, pite

En el segundo caso únicamente me trae el registro que contiene EXACTAMENTE la palabra "pite", es decir, para el ejemplo sería 1 solo registro.

La razón de cambiar la consulta es el tiempo de ejecución. En el primer caso se tarda 17ms y en el segundo 5ms (Tomado con data real, no con el ejemplo aquí colocado) La diferencia en el caso real son de 2 registros solamente.

Muchas gracias
__________________
José Molina
La marginalidad no esta en la incapacidad de calmar el hambre de un estómago sino en la incapacidad de calmar el hambre de la mente.
  #2 (permalink)  
Antiguo 19/07/2010, 10:58
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 7 meses
Puntos: 300
Respuesta: Fulltext con trozos de palabras

http://dev.mysql.com/doc/refman/5.0/...t-boolean.html

select campo from table where MATCH (campo) AGAINST ('*pite*' IN BOOLEAN MODE)
  #3 (permalink)  
Antiguo 19/07/2010, 12:03
Avatar de José Molina  
Fecha de Ingreso: enero-2002
Ubicación: USA
Mensajes: 768
Antigüedad: 22 años, 10 meses
Puntos: 1
Respuesta: Fulltext con trozos de palabras

Lamentablemente, me trae lo mismo que

select campo from table where MATCH (campo) AGAINST ('pite' IN BOOLEAN MODE)

Los registros que tienen "jupiter" no son vistos.
__________________
José Molina
La marginalidad no esta en la incapacidad de calmar el hambre de un estómago sino en la incapacidad de calmar el hambre de la mente.
  #4 (permalink)  
Antiguo 19/07/2010, 15:25
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 7 meses
Puntos: 300
Respuesta: Fulltext con trozos de palabras

Es cierto, José Molina,
el signo del truncamiento, el asterisco, no funciona poniéndolo al principio, probablemente porque Full Text trabaja con palabras y se necesita un límite. Sí funciona dentro de palabra y al final.
Para lo que quieres podrás usar el LIKE y expresiones regulares; ej.
SELECT campo FROM `tabla` WHERE campo REGEXP '.*pite.*'
  #5 (permalink)  
Antiguo 19/07/2010, 15:34
Avatar de José Molina  
Fecha de Ingreso: enero-2002
Ubicación: USA
Mensajes: 768
Antigüedad: 22 años, 10 meses
Puntos: 1
Respuesta: Fulltext con trozos de palabras

Lamentablemente la consulta funciona pero no es igual desde el punto de vista de consumo de recursos.

Colocale EXPLANE antes del SELECT para que veas como funciona uno y el otro. En mi caso que son mas de 400 mil registro, un LIKE me mata la DB ya toca muchos más registros.

Gracias de todas formas.
__________________
José Molina
La marginalidad no esta en la incapacidad de calmar el hambre de un estómago sino en la incapacidad de calmar el hambre de la mente.
  #6 (permalink)  
Antiguo 20/07/2010, 01:45
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 7 meses
Puntos: 300
Respuesta: Fulltext con trozos de palabras

entiendo. ¿Has probado la expresión regular? Imagino que consumirá incluso más. El campo sobre el que buscas con LIKE imagino que estará indexado como índice INDEX. Si no lo está, tal vez mejore algo. Seguiremos pensando dar solución a tu problema, aunque, como te he dicho, con Full text creo que no va a ser posible.
  #7 (permalink)  
Antiguo 20/07/2010, 07:14
Avatar de José Molina  
Fecha de Ingreso: enero-2002
Ubicación: USA
Mensajes: 768
Antigüedad: 22 años, 10 meses
Puntos: 1
Respuesta: Fulltext con trozos de palabras

Si, el campo esta creado como un Indice. Pero haciendo pruebas directo por consola no logro ver ahora el ahorro de tiempo en ms, porque pareceiran tiempos muy aleatorios en sus resultados.

Lo único que tengo es el registro de la DB que me indica que ese query esta pegado en la cola esperando para ejecutarse y espera justamente por el mismo.
__________________
José Molina
La marginalidad no esta en la incapacidad de calmar el hambre de un estómago sino en la incapacidad de calmar el hambre de la mente.
  #8 (permalink)  
Antiguo 21/07/2010, 01:36
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 7 meses
Puntos: 300
Respuesta: Fulltext con trozos de palabras

Aunque no sé si te servirá de mucho, esta consulta con expresión regular también funciona quizás sea más eficiente:
SELECT campo FROM `tabla` WHERE campo REGEXP '[[:<:]].*pit.*[[:>:]]'

Etiquetas: fulltext, palabras
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 12:20.