一尘不染

忽略查询中的mysql全文停用词

mysql

我正在建立一个利用全文搜索的网站搜索。搜索本身效果很好,这不是我的问题。我将用户提供的关键字(MATCH … AGAINST
…)与AND串在一起,以便多个单词进一步缩小结果范围。现在,我知道某些索引词没有被索引,这对我来说很好,我真的不想使用它们作为选择标准。但是,如果(由用户)在关键字集中提供了停用词,则即使该词实际上位于某个文本块中,它也会杀死所有结果(如预期的那样)。

我的问题:在查询时,是否有任何方法可以检查某个单词是否为停用词?我的首选解决方案是从搜索条件中排除相关的单词(我不在乎用户是否可以通过“都不”来缩小结果,我只是不希望MySQL返回空结果集,因为用户即使结果中都不存在)。还是我只需要清空停用词列表?非常感谢您的帮助。

编辑----很抱歉,但实际上没有提供此功能的代码段。该代码工作正常,实际上完全符合预期。我正在处理的更多是逻辑上的问题。但以示例的方式进行说明:

假设有3条记录,其中包含单词(但不限于)

1:苹果,橙,芒果,香蕉2:葡萄,橙,菠萝,芒果3:土豆,芒果,瓜,凯拉骑士

如果用户输入的搜索词是mango,则所有结果均正确返回。如果单词是橙色AND芒果,则返回结果1和2(正确)。现在,假设香蕉是一个停用词(不是……但让我们假设它是),如果搜索的是桔子,芒果和香蕉,则不会返回任何结果(因为香蕉不在全文索引中)。

我正在寻找的是其他任何人都遇到过这个问题,并且有一种解决方法。有点:

if 'banana' NOT STOP WORD match 'banana' against `words`. (OBVIOUSLY not real code).

或者…我只是必须删除停用词列表…


阅读 246

收藏
2020-05-17

共1个答案

一尘不染

您可以通过比较所有停用词来验证关键字。这是停用词的列表, 我已经找到了一种禁用全文停用词的解决方案。您只需要找到.cnf文件并将其添加,

ft_stopword_file = ""

重启mysql引擎并重建索引;

希望这项工作

2020-05-17