20/04/2014, 10:16
|
| | Fecha de Ingreso: abril-2014
Mensajes: 72
Antigüedad: 10 años, 9 meses Puntos: 5 | |
Respuesta: Buscador de música OK! entendí perfectamente lo que escribiste, ahora mismo me voy a poner a trabajar en cambiar la estructura de la tabla.
Por otro lado, el asunto de los LIKE's es muy importante para mí porque hay muchas canciones e intérpretes con nombres cortos (ejemplo de intérpretes: U2, QBO, JN3, SB4 [o Son by four, donde solo la palabra four sería encontrada] ...), es más, mira estos ejemplos:
1) U2 tiene una canción llamada ONE... ¿Que haríamos si a alguien le interesa buscarla? no podemos sencillamente ignorarlo...
2) Jesse y Joy tienen una canción que se llama mi sol, si el usuario busca mi sol jesse y joy está siendo muy específico pero solamente se buscaría la palabra jesse, trayendo como resultado TODAS las canciones de Jesse y Joy, pero también TODAS las de Jesse Stone, y en un orden impredecible (puede que habiendo sido tan específico, la canción que buscan salga los últimos puestos).
Por el otro lado tienes razón en que si buscamos LIKE %mi% AND LIKE %sol% podría ser peor porque traería ademas todas las canciones que incluyan la palabra SOLEDAD, SOLDADO, COMIDA, etc...
Ahora bien, ¿qué he hecho para solucionar esto? Antes de hacer la consulta MySQL, las palabras escritas por el usuario pasan por un script PHP que es quien da forma a la consulta final, añadiendo al MATCH... AGAINST... los LIKE's de de la siguiente manera: Búsqueda del usuario: one u2 Consulta MySQL: SELECT todo_lo_necesario FROM las_tablas WHERE MATCH ("one u2") AGAINST (los_campos) OR (campo LIKE '%one %') OR (campo LIKE '% one%') OR (campo LIKE '% one %') OR (campo = 'one') OR (campo LIKE '% u2%') OR (campo LIKE 'u2 %') OR (campo LIKE '% u2 %') OR (campo = 'u2')
De esa manera traería aquellas consultas donde se incluyan las palabras exactas, se encuentren al final, al principio o en el medio de la oración, o bien, sean la única palabra (es decir, traería "one direction" o "one way", pero no traería "se pone bien"). Ahora el problema únicamente sería que no necesariamente las traería en orden.
PARA FINALIZAR: ¿Cual pienso yo que sería la solución correcta? Buscar la manera de que a mayor coincidencia de palabras cortas, la relevancia aumente, así "ONE de U2", estaría primero que las canciones de "ONE DIRECTION" o el resto de las canciones de "U2", por tener dos coincidencias, mientras las otras solo tienen una (también solucionaría lo del orden con el ejemplo de la canción Mi sol de Jesse y Joy). ¿Que piensas? ¿Se podría hacer algo así?
Última edición por zyxer; 20/04/2014 a las 11:12 |