Одним из способов сделать это может быть преобразование apple, oranges, pears
в apple|oranges|pears
и использование RLIKE
(т.е. регулярное выражение) для сопоставления с ним.
Например, «Джон любил есть яблоки» соответствует регулярному выражению «яблоко | апельсин | груши».
Во-первых, чтобы преобразовать 'яблоко, апельсины, груши' в форму регулярного выражения, замените все ',' на '|' используя REPLACE
. Затем используйте RLIKE
, чтобы выбрать ключевые слова, которые соответствуют:
SELECT *
FROM keywords_table
WHERE 'John liked to eat apples' RLIKE REPLACE(keywords,', ','|');
Однако это зависит от согласованности вашего разделения через запятую (т. Е. Если есть одна строка, похожая на apples,oranges
, это не сработает, так как REPLACE
заменяет запятую, за которой следует пробел (в соответствии с примерами строк) ).
Я тоже не думаю, что это очень хорошо увеличится.
И, если у вас есть предложение типа «Джон любил есть ананасы», оно совпадало бы с двумя строками выше (так как в нем «яблоко»). Затем вы можете попытаться добавить границы слов к регулярному выражению (т.е. WHERE $sentence RLIKE '[[:<:]](apple|oranges|pears)[[:>:]]'
), но это приведет к неправильному совпадению, если у вас есть множественное число («яблоки» не будут совпадать с «[wordboundary] apple [wordboundary]»).