Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

consulta mysql para combinar frase com palavras-chave em um campo


Uma maneira de fazer isso pode ser converter apple, oranges, pears para apple|oranges|pears e use RLIKE (ou seja, expressão regular) para corresponder a ela.

Por exemplo, 'John gostava de comer maçãs' corresponde ao regex 'apple|orange|pears'.

Primeiro, para converter 'maçã, laranjas, pêras' para a forma regex, substitua todos ', ' por '|' usando REPLACE . Em seguida, use RLIKE para selecionar as entradas de palavra-chave que correspondem:
SELECT * 
FROM keywords_table
WHERE 'John liked to eat apples' RLIKE REPLACE(keywords,', ','|');

No entanto, isso depende de sua separação por vírgulas ser consistente (ou seja, se houver uma linha que se pareça com apples,oranges isso não funcionará como REPLACE substitui uma vírgula seguida por um espaço (conforme suas linhas de exemplo).

Eu também não acho que vai escalar muito bem.

E, se você tiver uma frase como 'João gostava de comer abacaxi', ela corresponderia a ambas as linhas acima (já que tem 'maçã' nela). Você pode então tentar adicionar limites de palavras ao regex (ou seja, WHERE $sentence RLIKE '[[:<:]](apple|oranges|pears)[[:>:]]' ), mas isso estragaria a correspondência quando você tem plurais ('apples' não corresponderia a '[wordboundary]apple[wordboundary]').