Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Beste Möglichkeit, eine gewichtete Suche über mehrere Felder in MySQL durchzuführen?

Wahrscheinlich ist dieser Ansatz, eine gewichtete Suche / Ergebnisse durchzuführen, für Sie geeignet:

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

Es verwendet eine ausgewählte Unterabfrage, um die Gewichtung zum Ordnen der Ergebnisse bereitzustellen. In diesem Fall werden drei Felder durchsucht, Sie können eine Gewichtung pro Feld angeben. Es ist wahrscheinlich weniger teuer als Unions und wahrscheinlich nur in reinem MySQL einer der schnelleren Wege.

Wenn Sie mehr Daten haben und schneller Ergebnisse benötigen, können Sie etwas wie Sphinx oder Lucene verwenden.