【发布时间】:2012-09-22 15:15:00
【问题描述】:
我正在构建一个使用全文搜索的网站搜索。搜索本身效果很好,那不是我的问题。我将用户提供的关键字(匹配...反对...)与 AND 串在一起,以便多个词进一步缩小结果。现在,我知道某些停用词没有被索引,这对我来说很好,我真的不想将它们用作选择标准。但是,如果(由用户)在关键字集中提供了一个停用词,它会杀死所有结果(如预期的那样),即使该词实际上位于某个文本块中。
我的问题:有没有办法在查询时检查某个单词是否是停用词?我首选的解决方案是从搜索条件中排除相关的单词(我不在乎用户是否可以通过单词'neither'来缩小结果,我只是不希望 MySQL 返回一个空的结果集,因为用户提供它,即使结果中都不存在)。或者,我是否只需要清空停用词列表?非常感谢您的帮助。
编辑---- 我很抱歉,但实际上没有代码 sn-ps 可以为这个提供。该代码工作正常,实际上完全符合预期。这更像是我正在处理的一个逻辑问题。但作为一个例子,在解释的方式上:
假设有三个记录,其中包括单词(但不限于)
1:苹果、橙子、芒果、香蕉 2:葡萄、橙子、菠萝、芒果 3:土豆、芒果、甜瓜、凯拉骑士
如果用户输入的搜索词是芒果,则所有结果都正确返回。如果单词是橙色 AND 芒果,则返回结果 1 和 2(正确)。现在,假设香蕉是一个停用词(它不是……但我们假设它是),如果搜索的是橙色、芒果和香蕉,则不会返回任何结果(因为香蕉不在全文索引中)。
我正在寻找的是是否有其他人遇到过这个问题,并且有办法解决这个问题。一种:
if 'banana' NOT STOP WORD match 'banana' against `words`. (OBVIOUSLY not real code).
或者...我是否只需要删除停用词列表...
【问题讨论】:
-
你尝试了什么?你能给我们举个例子吗?
-
似乎没有一个答案能真正得到你想要的。您总是可以编写应用程序代码来手动过滤掉查询中的任何停用词(以及太短的词)。这很可能是我们要做的。
-
2017 和同样的问题在这里.. 似乎 mysql 全文搜索的设计真的很差,缺乏基本功能..
标签: mysql full-text-search stop-words