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

MySQL-Abfrage, um Sätze mit Schlüsselwörtern in einem Feld abzugleichen

Eine Möglichkeit, dies zu tun, könnte darin bestehen, apple, oranges, pears umzuwandeln zu apple|oranges|pears und verwenden Sie RLIKE (dh regulärer Ausdruck) damit übereinstimmen.

Beispiel:„John aß gerne Äpfel“ entspricht dem regulären Ausdruck „Apfel|Orange|Birnen“.

Um zunächst „Apfel, Orangen, Birnen“ in die Regex-Form umzuwandeln, ersetzen Sie alle „,“ durch „|“. mit REPLACE . Verwenden Sie dann RLIKE So wählen Sie die passenden Keyword-Einträge aus:

SELECT * 
FROM keywords_table
WHERE 'John liked to eat apples' RLIKE REPLACE(keywords,', ','|');

Dies hängt jedoch davon ab, dass Ihre Komma-Trennung konsistent ist (d. h. wenn es eine Zeile gibt, die wie apples,oranges aussieht dies funktioniert nicht als REPLACE ersetzt ein Komma gefolgt von einem Leerzeichen (wie in Ihren Beispielzeilen).

Ich glaube auch nicht, dass es sich sehr gut skalieren lässt.

Und wenn Sie einen Satz wie „John aß gerne Ananas“ haben, würde er mit beiden Zeilen darüber übereinstimmen (da er „Apfel“ enthält). Sie könnten dann versuchen, der Regex Wortgrenzen hinzuzufügen (z. B. WHERE $sentence RLIKE '[[:<:]](apple|oranges|pears)[[:>:]]' ), aber das würde die Übereinstimmung vermasseln, wenn Sie Pluralformen haben ('Äpfel' würde nicht zu '[Wortgrenze]Apfel[Wortgrenze]' passen).