Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Melhor maneira de fazer uma pesquisa ponderada em vários campos no mysql?


Provavelmente esta abordagem de fazer uma pesquisa/resultados ponderados é adequada para você:
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

Ele usa uma subconsulta select para fornecer o peso para ordenar os resultados. Neste caso, três campos pesquisados, você pode especificar um peso por campo. É provavelmente mais barato do que as uniões e provavelmente uma das maneiras mais rápidas apenas no MySQL simples.

Se você tiver mais dados e precisar de resultados mais rápidos, considere usar algo como Sphinx ou Lucene.