MySQL 搜索匹配单词的一部分

标签 mysql sql database

对于我网站上的一个小而简单的搜索工具,我使用 MySQL 的 MATCH AGAINST 根据搜索词查找最相关的行。现在我使用这个查询:

SELECT * FROM mytable WHERE MATCH (name,description) AGAINST ('".$term."*' IN BOOLEAN MODE)

例如,如果我搜索“sys”,查询会给出包含“system”或“systems”等单词的结果。我遇到的问题和我想要实现的目标是,当搜索词是“系统”时,我只能得到带有确切单词“系统”的结果,而我希望获得带有单词“系统”的结果也是如此。

我已经检查了文档,但似乎找不到解决方案。以前有人遇到过这个吗?

最佳答案

评论有点长。

您所要求的内容通常在全文搜索引擎中以两种方式之一实现。更常见的方法是列出术语的同义词。这些可以让你说“系统”和“系统”是同一件事。

据我所知,MySQL不支持同义词列表。您可以通过预处理数据或查询来替换同义词值,以一种麻烦的方式自己实现它们。

第二种方法称为词干提取。这会将单词转换为其“根”形式,因此“systems”将被识别为“system”的复数形式,并且两者将匹配。词干只能应用于查询中。或者,对于真正雄心勃勃的人来说,它也可以应用于文档存储方面。问题是存在歧义。英语(和其他语言)充满了词干提取没有意义的异常(exception)情况。

关于MySQL 搜索匹配单词的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39289031/

相关文章:

用于搜索的 MySQL 正则表达式

MYSQL Join 3 Tables - 使用第二次连接的结果进行第三次连接

php - mysql 中的多对多查询

mysql - 多对多关系 : better OTLT or 48 association/junction tables?

php - 使用来自动态生成的文本框列表的数据更新 mysql 数据库的正确方法是什么?

mysql - 对包含多行(250m+ 行)的表进行选择查询

数据库被锁定

mysql - 不同条件下的多选计数

mysql - 检查一对一关系 - SQL

mysql - 如何在没有连续切割的情况下使用 mysql group_concat(concat())