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

Búsqueda fulltext ordenada

Estas en el tema de Búsqueda fulltext ordenada en el foro de Mysql en Foros del Web. Buenos días, Me encuentro realizando una base de datos donde tengo unas columnas de id, titulo y año. La búsqueda la realizo mediante fullsearch y ...
  #1 (permalink)  
Antiguo 09/05/2012, 22:25
 
Fecha de Ingreso: diciembre-2006
Mensajes: 16
Antigüedad: 17 años, 4 meses
Puntos: 0
Pregunta Búsqueda fulltext ordenada

Buenos días,

Me encuentro realizando una base de datos donde tengo unas columnas de id, titulo y año. La búsqueda la realizo mediante fullsearch y consigo ordenar los resultados por orden de relevancia. Sin embargo, sería posible ordenar dichos resultados además de por relevancia, por año? Es una duda que tengo porque ya he intentado hacerlo pero si introduzco:

ORDER BY `año` DESC

me estropea el orden de relevancia que había...

Espero que alguien sepa hacerlo porque no logro encontrar nada.

Muchas gracias de antemano!!
  #2 (permalink)  
Antiguo 10/05/2012, 02:17
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Búsqueda fulltext ordenada

No nos dices como ordenas por relevancia luego dificilmente te podemos decir que tienes que modificar...


ORDER BY `año` DESC ,`relevancia` DESC

(relevancia dentro de año)

o

ORDER BY `relevancia` DESC , `año` DESC

(año dentor de relevancia)

....????
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 10/05/2012, 06:38
 
Fecha de Ingreso: diciembre-2006
Mensajes: 16
Antigüedad: 17 años, 4 meses
Puntos: 0
Respuesta: Búsqueda fulltext ordenada

Hola, muchas gracias por contestar quimfv,

La relevancia no la ordeno yo, la ordena el propio comando fulltext, es decir:

SELECT `title` FROM `inventario` WHERE MATCH (`title`,`key`) AGAINST ('leon animal')

Esto hace que en los resultados que me aparezcan, las primeras palabras tengan los 2 campos (leon y animal), es decir, 2 coincidencias y máxima relevancia. Y luego posteriormente aparecerán palabras que solo tengan leon o solo tengan animal, es decir, 1 coincidencia.

Sin embargo, son fotos y han estado tomadas diferentes años , por lo que me gustaría poder ordenar según el patrón anterior y además, dentro de todas las fotos que tengan máxima relevancia, se ordenen según el año que fueron tomadas, posteriormente las que tengan 1 coincidencia, que también sean ordenadas además por el año... así sucesivamente.

Ya he probado con:

SELECT `title` FROM `inventario` WHERE MATCH (`title`,`key`) AGAINST ('leon animal') ORDER BY `year` DESC

Y sin embargo con esta cadena solo me ordena por año, se carga las relevancias ya que perfectamente aparece un pájaro como primer resultado (por ser animal) habiendo metido leon y animal...

Muchas gracias de todas maneras quimfv
  #4 (permalink)  
Antiguo 10/05/2012, 09:53
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Búsqueda fulltext ordenada

Hola johndi:

Puedes probar con cualquiera de las dos siguientes maneras

Código MySQL:
Ver original
  1. SELECT `title`, MATCH (`title`,`key`) AGAINST ('leon animal') relevancia
  2. FROM `inventario`
  3. WHERE MATCH (`title`,`key`) AGAINST ('leon animal')
  4. ORDER BY relevancia, `year` DESC

o así:

Código MySQL:
Ver original
  1. SELECT `title`
  2. FROM `inventario`
  3. WHERE MATCH (`title`,`key`) AGAINST ('leon animal')
  4. ORDER BY MATCH (`title`,`key`) AGAINST ('leon animal'), `year` DESC

Haz la prueba y nos comentas.

Saludos
Leo
  #5 (permalink)  
Antiguo 10/05/2012, 10:07
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, 4 meses
Puntos: 2658
Respuesta: Búsqueda fulltext ordenada

Parece que no te huese quedado clara la idea dada por Quimfv.
El tema es que en el ORDER BY se listan separados por comas, los diferentes criterios por los que se quiere ordenar. Por eso debería ir, por ejemplo, `year`, animal, etc. Pero también la relevancia, ya que esa cláusula puede manejar apuntar a campos invisibles o funciones, como sería el MATCH() AGAINST().
Puedes poner el valor en una columna y luego invocar esa columnas por alias en el ORDER BY, o bien repites la función completa en él, donde toma el valor y lo aplica.


PD: Tienes claro que la relevancia es inversa ¿No?: A menor apariciones, más relevante.



Parece que hoy tardé demasiado, Leo...

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 10/05/2012, 13:53
 
Fecha de Ingreso: diciembre-2006
Mensajes: 16
Antigüedad: 17 años, 4 meses
Puntos: 0
Respuesta: Búsqueda fulltext ordenada

Muchas gracias por vuestra ayuda,

La verdad es que prové las opciones que me diste pero me dan el mismo resultado que si no añadiera ORDER BY MATCH (`title`,`key`) AGAINST ('leon animal'), `YEAR` DESC

Y tienes razón gnzsoloyo, no leí bien el comentario que hizo Quimfv

Os explico de manera general lo que pretendo hacer, espero que me explique bien:

Tengo 3 columnas de tipo fulltext: `title`,`key`,`technique` y luego tengo otra con `year`.
Si me dispongo a realizar una búsqueda de `coche` y tengo en una fila del formulario `coche`,`coche`,`coche` y en otra `coche`,`coche`,`deportivo`, saldrá la primera en primer lugar por tener 3 coincidencias.
Sin embargo, si en una línea hay `coche`,`coche`,`deportivo`(1995) y en otra `coche`,`coche`,`familiar`(1992), me gustaría que antes saliera el deportivo por ser más reciente.

Es decir, básicamente lo que quiero es que me ordene por orden de coincidencias, y dentro de cada orden de coincidencias que me ordene por año, es decir:

3 coincidencias:
-2005
-2002
-1997

2 coincidencias:
-2012
-2007
...

Donde las coincidencias van relacionadas además según el número de palabras que introduzco en la búsqueda, ya que se analizan de forma individual. Es decir, si introduzco 3 palabras, habrá posibilidad real de que haya 3 coincidencias con alguna fila del formulario, o 2 o 1...

Muchísimas gracias de todas formas por las molestias que os estais tomando
  #7 (permalink)  
Antiguo 13/05/2012, 08:11
 
Fecha de Ingreso: diciembre-2006
Mensajes: 16
Antigüedad: 17 años, 4 meses
Puntos: 0
Respuesta: Búsqueda fulltext ordenada

Gracias a todos, al final encontré la respuesta. Espero que a alguien en un futuro le sirva:

Código MySQL:
Ver original
  1. "SELECT *, (MATCH (`title`,`key`,`technique`) AGAINST ('algo' IN BOOLEAN MODE)) as relevance FROM `inventario` WHERE MATCH (`title`,`key`,`technique`) AGAINST ('algo') AND (mas condiciones filtrado) ORDER BY relevance DESC, year DESC"

Un saludo
  #8 (permalink)  
Antiguo 13/05/2012, 08:24
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, 4 meses
Puntos: 2658
Respuesta: Búsqueda fulltext ordenada

Código MySQL:
Ver original
  1.     *,
  2.     (MATCH (`title`,`key`,`technique`) AGAINST ('algo' IN BOOLEAN MODE))  relevance
  3.     `inventario`
  4.     MATCH (`title`,`key`,`technique`) AGAINST ('algo')
  5.     AND (mas condiciones filtrado)
  6. ORDER BY relevance DESC, year DESC
O sea, terminaste haciendo exactamente lo que te dijimos que hicieras...
Cita:
Puedes poner el valor en una columna y luego invocar esa columnas por alias en el ORDER BY, o bien repites la función completa en él, donde toma el valor y lo aplica.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 15/05/2012, 16:28
 
Fecha de Ingreso: diciembre-2006
Mensajes: 16
Antigüedad: 17 años, 4 meses
Puntos: 0
Respuesta: Búsqueda fulltext ordenada

Era lo mismo que habíais dicho, pero el único detalle es que si lo hacía como me dijisteis no me salia nada, era como hacer una búsqueda normal fulltext sin ninguna ordenación más. Sin embargo, al meter IN BOOLEAN MODE, se me arreglo todo vamos, por si a alguien mas le sirve.

Un saludo

Etiquetas: fulltext, ordenada
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 00:09.