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

标签 mysql sql full-text-search

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

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

我正在尝试找出如何使用以下输入字符串查询此表: 约翰喜欢吃苹果

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

最佳答案

一种方法是转换 apple, oranges, pearsapple|oranges|pears并使用 RLIKE (即正则表达式)来匹配它。

例如,“John liked to eat apples”匹配正则表达式“apple|orange|pears”。

首先,要将“apple, oranges, pears”转换为正则表达式,将所有“,”替换为“|”使用 REPLACE .然后使用 RLIKE选择匹配的关键字条目:

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

但这确实取决于您的逗号分隔是否一致(即,如果有一行看起来像 apples,oranges 这将不起作用,因为 REPLACE 替换逗号后跟一个空格(根据您的示例行).

我也不认为它会很好地扩展。

而且,如果您有一个像“John liked to eat pineapples”这样的句子,它会匹配上面的两行(因为它确实包含“apple”)。然后您可以尝试向正则表达式添加单词边界(即 WHERE $sentence RLIKE '[[:<:]](apple|oranges|pears)[[:>:]]' ),但是当您有复数时,这会搞砸匹配('apples' 不会匹配 '[wordboundary]apple[wordboundary]')。

关于mysql查询将句子与字段中的关键字进行匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9424959/

相关文章:

mysql - Doctrine 2 : query using NativeQuery and ResultSetMapping

python - 如何将flappybird游戏的分数存储到sql数据库中

Mysql全文搜索,自然语言模式 : order by "closeness"

mysql - 如何在相关子查询中计算 MySQL 中的移动平均值?

mysql - 如何在mysql表中进行逐行计算以获得汇总结果?

php - 使用 MySQL 查询更新两个表字段值

php mongodb全文搜索和排序

sql-server - 你如何在sql server中实现多列的全文搜索?

java - Android应用程序如何访问MySQL?

c# - SQL原子事务不是原子的