sql >> Databasteknik >  >> RDS >> Mysql

php/mysql. Finns det mysql-funktion för att upptäcka om minst 2 vissa ord finns i minst ett mysql-radfält

Jag tror att du vill använda Boolesk fulltextsökning

Om du matchar utan operatorer + - mot såsom green red blue alla rader returneras, där en post innehåller minst ett ord:green eller red eller blue .

IN BOOLEAN MODE och utan operatorer får varje matchat ord 1 . Så om det finns en post som matchar två av de tre orden skulle den få 2 .

För att få raderna med minst 2 poäng:

SELECT *,
MATCH (`TextToCheckIn`) AGAINST ('green red blue' IN BOOLEAN MODE) `score`
FROM `my_tab` WHERE 
MATCH (`TextToCheckIn`) AGAINST ('green red blue' IN BOOLEAN MODE)
HAVING `score` >= 2
ORDER BY `score` DESC

I naturligt språkläge poängsättning fungerar helt annorlunda. Tror att den främst är baserad på BM25 .

På stora datamängder boolesk fulltextsökning (med ett fulltextindex ) överträffar vanligtvis REGEXP eller LIKE överlägset om matchande ord någonstans i texten. Skulle bara använda like/regexp för att matcha från initialen såsom REGEXP '^word' eller LIKE 'word%' - om ett index kan användas.



  1. Hur släpper jag SQL-standardbegränsning utan att veta dess namn?

  2. JavaScript Date Objects månadsindex börjar med 0

  3. Oracle Pl/SQL:Slinga genom XMLTYPE-noder

  4. Första offentliga förhandsvisning av SQL Server 2019:CTP 2.0