一尘不染

mysql查询以将句子与字段中的关键字匹配

sql

我有一个带有关键字列表的mysql表,例如:

id | keywords
---+--------------------------------
 1 | apple, oranges, pears
 2 | peaches, pineapples, tangerines

我试图弄清楚如何使用输入字符串查询此表:约翰喜欢吃苹果

有没有一种mysql查询类型可以查询带有句子的字段并返回结果(在我的示例中,记录#1)?


阅读 127

收藏
2021-05-16

共1个答案

一尘不染

一种实现方法是转换apple, oranges, pearsapple|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)[[:>:]]'),但是当您使用复数形式时(“
apples”将不与“ [wordboundary] apple [wordboundary]”匹配),这将使匹配变得更糟。

2021-05-16