对于我网站上的一个小而简单的搜索工具,我使用 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/