sql >> Databasteknik >  >> RDS >> Mysql

Bästa sättet att göra en viktad sökning över flera fält i mysql?

Förmodligen är det här tillvägagångssättet att göra en viktad sökning/resultat lämplig för dig:

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

Den använder en utvald underfråga för att ange vikten för att beställa resultaten. I det här fallet sökte tre fält över, du kan ange en vikt per fält. Det är förmodligen billigare än fackföreningar och förmodligen ett av de snabbare sätten endast i vanlig MySQL.

Om du har mer data och behöver resultat snabbare kan du överväga att använda något som Sphinx eller Lucene.



  1. Hur använder jag ROW_NUMBER()?

  2. Hur kan jag använda UUID i SQLAlchemy?

  3. RMAN-kommandon misslyckas med ORA-00904:"BS".."GUID":ogiltig identifierare

  4. vad som händer i cutover-fasen av adop i R12.2