sql >> Database >  >> RDS >> Mysql

php/mysql. Is er een mysql-functie om te detecteren of er ten minste 2 bepaalde woorden in ten minste één mysql-rijveld voorkomen?

Ik denk dat je Boolean Full-Text Search

Als je matcht zonder operators + - tegen zoals green red blue alle rijen worden geretourneerd, waarbij een record ten minste één woord bevat:green of red of blue .

IN BOOLEAN MODE en zonder operatoren scoort elk gevonden woord 1 . Dus als er een record is dat overeenkomt met twee van de drie woorden, scoort het 2 .

Om de rijen met minimaal 2 scores te krijgen:

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

In Natuurlijke taalmodus scoren werkt heel anders. Denk dat het voornamelijk gebaseerd is op BM25 .

Op grote datasets boolean fulltext zoeken (met behulp van een fulltext index ) presteert meestal beter dan REGEXP of LIKE verreweg als woorden ergens overeenkomen in de tekst. Zou alleen like/regexp gebruiken voor overeenkomsten vanaf de initiaal, zoals REGEXP '^word' of LIKE 'word%' - of een index kan worden gebruikt.



  1. Hoe de functie Degrees() werkt in PostgreSQL

  2. Voeg twee tabellen samen (met een 1-M-relatie) waarbij de tweede tabel moet worden 'afgeplat' tot één rij

  3. Meerdere rijen met verschillende waarden bijwerken

  4. Hoe schrijf je een opgeslagen procedure met behulp van phpmyadmin en hoe gebruik je deze via php?