Un modo per farlo potrebbe essere convertire apple, oranges, pears
a apple|oranges|pears
e usa RLIKE
(es. espressione regolare) da confrontare con esso.
Ad esempio, "a John piaceva mangiare le mele" corrisponde all'espressione regolare "mela|arancione|pere".
Innanzitutto, per convertire 'mela, arance, pere' nel modulo regex, sostituisci tutto ', ' con '|' utilizzando REPLACE
. Quindi usa RLIKE
per selezionare le voci di parole chiave che corrispondono a:
SELECT *
FROM keywords_table
WHERE 'John liked to eat apples' RLIKE REPLACE(keywords,', ','|');
Tuttavia, ciò dipende dalla coerenza della separazione delle virgole (ad es. se c'è una riga che assomiglia a apples,oranges
questo non funzionerà come REPLACE
sostituisce una virgola seguita da uno spazio (come per le righe di esempio).
Inoltre, non credo che aumenterà molto bene.
E, se hai una frase come "a John piaceva mangiare ananas", corrisponderebbe a entrambe le righe sopra (poiché contiene "mela"). Puoi quindi provare ad aggiungere i limiti delle parole alla regex (ad esempio WHERE $sentence RLIKE '[[:<:]](apple|oranges|pears)[[:>:]]'
), ma ciò rovinerebbe la corrispondenza quando si hanno i plurali ("mele" non corrisponderebbe a "[wordboundary]apple[wordboundary]').