Mysql
 sql >> Base de données >  >> RDS >> Mysql

La meilleure façon de faire une recherche pondérée sur plusieurs champs dans mysql ?

Cette approche de recherche/résultats pondérés vous convient probablement :

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

Il utilise une sous-requête de sélection pour fournir le poids permettant de classer les résultats. Dans ce cas, trois champs recherchés, vous pouvez spécifier un poids par champ. C'est probablement moins cher que les unions et probablement l'un des moyens les plus rapides de MySQL uniquement.

Si vous avez plus de données et avez besoin de résultats plus rapidement, vous pouvez envisager d'utiliser quelque chose comme Sphinx ou Lucene.