sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo puedo manipular la relevancia de búsqueda de texto completo de MySQL para hacer que un campo sea más 'valioso' que otro?

Crear tres índices de texto completo

  • a) uno en la columna de palabra clave
  • b) uno en la columna de contenido
  • c) uno en la columna de palabra clave y contenido

Entonces, su consulta:

SELECT id, keyword, content,
  MATCH (keyword) AGAINST ('watermelon') AS rel1,
  MATCH (content) AGAINST ('watermelon') AS rel2
FROM table
WHERE MATCH (keyword,content) AGAINST ('watermelon')
ORDER BY (rel1*1.5)+(rel2) DESC

El punto es que rel1 le da la relevancia de su consulta solo en la keyword columna (porque creó el índice solo en esa columna). rel2 hace lo mismo, pero para el content columna. Ahora puede sumar estas dos puntuaciones de relevancia aplicando la ponderación que desee.

Sin embargo, no está utilizando ninguno de estos dos índices para la búsqueda real. Para eso, usa su tercer índice, que está en ambas columnas.

El índice de (palabra clave, contenido) controla su recuerdo. También conocido como lo que se devuelve.

Los dos índices separados (uno solo para palabras clave y otro solo para contenido) controlan su relevancia. Y puede aplicar sus propios criterios de ponderación aquí.

Tenga en cuenta que puede usar cualquier número de índices diferentes (o variar los índices y las ponderaciones que usa en el momento de la consulta en función de otros factores tal vez ... solo busque una palabra clave si la consulta contiene una palabra vacía ... reduzca el sesgo de ponderación para palabras clave si la consulta contiene más de 3 palabras... etc).

Cada índice utiliza espacio en disco, por lo que más índices, más disco. Y a su vez, una mayor huella de memoria para mysql. Además, las inserciones tardarán más, ya que tiene más índices para actualizar.

Debe comparar el rendimiento (teniendo cuidado de desactivar el caché de consultas mysql para comparar, de lo contrario, sus resultados serán sesgados) para su situación. Esto no es eficiente para el grado de Google, pero es bastante fácil y "listo para usar" y es casi seguro que es mucho mejor que el uso de "me gusta" en las consultas.

Creo que funciona muy bien.