sql >> Databáze >  >> RDS >> Mysql

php/mysql. Existuje funkce mysql ke zjištění, zda existují alespoň 2 určitá slova v alespoň jednom poli řádku mysql

Myslím, že chcete použít Booleovské fulltextové vyhledávání

Pokud odpovídáte bez operátorů + - proti jako je green red blue jsou vráceny všechny řádky, kde záznam obsahuje alespoň jedno slovo:green nebo red nebo blue .

IN BOOLEAN MODE a bez operátorů bude mít každé odpovídající slovo skóre 1 . Pokud tedy existuje záznam odpovídající dvěma ze tří slov, dostane skóre 2 .

Chcete-li získat řádky s alespoň 2 skóre:

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

V režimu přirozeného jazyka bodování funguje úplně jinak. Domnívám se, že je primárně založen na BM25 .

U velkých datových sad booleovské fulltextové vyhledávání (pomocí fulltextového indexu ) obvykle překonává REGEXP nebo LIKE zdaleka, pokud se slova shodují někde v textu. Použil by pouze like/regexp pro shodu s iniciálou, jako je REGEXP '^word' nebo LIKE 'word%' - pokud lze použít index.



  1. Po aktualizaci Windows 10 1803 můj program nemůže otevřít soket při spuštění ze sdílené sítě

  2. Jak uložit výsledky dotazu MySQL do jiné tabulky?

  3. Vytvořte úlohu SQL Server Agent v Azure Data Studio

  4. Vnořený příkaz select v SQL Server