Mysql
 sql >> Database >  >> RDS >> Mysql

Il modo migliore per eseguire una ricerca ponderata su più campi in MySQL?

Probabilmente questo approccio di fare una ricerca / risultati ponderati è adatto a te:

SELECT *,
    IF(
            `name` LIKE "searchterm%",  20, 
         IF(`name` LIKE "%searchterm%", 10, 0)
      )
      + IF(`description` LIKE "%searchterm%", 5,  0)
      + IF(`url`         LIKE "%searchterm%", 1,  0)
    AS `weight`
FROM `myTable`
WHERE (
    `name` LIKE "%searchterm%" 
    OR `description` LIKE "%searchterm%"
    OR `url`         LIKE "%searchterm%"
)
ORDER BY `weight` DESC
LIMIT 20

Utilizza una sottoquery select per fornire il peso per ordinare i risultati. In questo caso tre campi ricercati, è possibile specificare un peso per campo. Probabilmente è meno costoso dei sindacati e probabilmente uno dei modi più veloci solo in MySQL.

Se hai più dati e hai bisogno di risultati più velocemente, puoi prendere in considerazione l'utilizzo di qualcosa come Sphinx o Lucene.