Ver Mensaje Individual
  #2 (permalink)  
Antiguo 07/01/2015, 14:42
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: Búsquedas por texto

Hola fbedia:

La mejor opción para hacer búsquedas de textos, son definitivamente las BÚSQUEDAS DE TEXTO COMPLETO, sin embargo, hay que tener cuidado en algunos aspectos.

Cita:
Por ejemplo, si quiero buscar la pelicula "El señor de los anillos":

SELECT titulo FROM videos WHERE MATCH(titulo) AGAINST ('anillo')

Esta consulta no me devuelve resultados... por lo que no me vale
Mucho ojo, no sé cuantos registros tienes en tu tabla, pero es posible que la consulta esté arrojando vacío debido a que encuentra muchos registros que cumplen la condición de búsqueda... lo mismo pasa con tu otro ejemplo:


Cita:
Otro ejemplo, es que para buscar la pelicula "VHS":

SELECT titulo FROM videos WHERE MATCH(titulo) AGAINST ('VHS')

No me devuelve resultados, ya que solo son 3 caracteres y tiene que ser a partir de 4
La razón para "obligar" a que las cadenas de búsqueda sean de 4 caracteres o más, es precisamente para evitar que puedan aparecer muchos registros que cumplan con la búsqueda. Checa esta liga:

http://dev.mysql.com/doc/refman/5.0/...ne-tuning.html

Ahí te dan algunos tips para "alterar" los criterios para la búsqueda de texto completo.

En lo particular prefiero utilizar IN BOOLEAN MODE, ya te que da más flexibilidad para crear tus cadenas de búsqueda. Dices que ya utilizaste operadores + - *, sin embargo no nos dices cómo es es que creaste tus Expresiones regulares. Puedo apostar mi café de la mañana a que hay algún error en la manera en que estás utilizando estos operadores.

Finalmente, siempre podrás utilizar más de una técnica de búsqueda... para tu caso utilizando LIKE sería simplemente o si lo prefieres utilizar expresiones regulares:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +------+--------------------------+
  3. | id   | descripcion              |
  4. +------+--------------------------+
  5. |    1 | El señor de los anillos  |
  6. |    2 | anillo de compromiso     |
  7. |    3 | otra pelicula de anillos |
  8. |    4 | esta no                  |
  9. +------+--------------------------+
  10. 4 rows in set (0.00 sec)
  11.  
  12. mysql> SELECT * FROM tabla WHERE descripcion LIKE '%anillo%';
  13. +------+--------------------------+
  14. | id   | descripcion              |
  15. +------+--------------------------+
  16. |    1 | El señor de los anillos  |
  17. |    2 | anillo de compromiso     |
  18. |    3 | otra pelicula de anillos |
  19. +------+--------------------------+
  20. 3 rows in set (0.00 sec)
  21.  
  22. mysql> SELECT * FROM tabla WHERE descripcion REGEXP 'anillo';
  23. +------+--------------------------+
  24. | id   | descripcion              |
  25. +------+--------------------------+
  26. |    1 | El señor de los anillos  |
  27. |    2 | anillo de compromiso     |
  28. |    3 | otra pelicula de anillos |
  29. +------+--------------------------+
  30. 3 rows in set (0.00 sec)

Saludos
Leo