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

标签 mysql full-text-search stop-words

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

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

编辑---- 抱歉,确实没有为此提供的代码片段。代码工作正常,实际上完全符合预期。我正在处理的更像是一个逻辑问题。但作为一个例子,以解释的方式:

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

1:苹果、橙子、芒果、香蕉 2:葡萄、橙子、菠萝、芒果 3:土 bean 、芒果、甜瓜、keira knightly

如果用户输入的搜索词是mango,则所有结果都正确返回。如果单词是 orange AND mango,则返回结果 1 和 2(正确)。现在,假设 banana 是停用词(它不是……但我们假设它是),如果搜索的是 orange、mango 和 banana,则不会返回任何结果(因为 banana 不在全文索引中)。

我正在寻找的是是否有其他人遇到过这个问题,并且有办法解决它。有点像:

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

或者...我是否只需要删除停用词列表...

最佳答案

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

ft_stopword_file = ""

重启mysql引擎并重建索引;

希望这项工作

关于mysql - 忽略查询中的mysql全文停用词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12678920/

相关文章:

MySql 字符串操作,从文本中选择项目

java - 删除 Java 中的停用词 --- 需要帮助

mysql - MySQL、Laravel、Translation 中的某些列获取 null

django - 是否可以在 Djangos SearchVectorField 中保留一个连接字段?

solr - 如何在 SOLR 中索引文档?

ruby - 从文本描述中简单过滤掉常用词

indexing - elasticsearch:如何索引仅是停用词的术语?

php - CakePHP - 错误 : SQLSTATE[HY000]: General error: 1364 Field 'title'

php - 根据特定 ID 按字母顺序选择用户

php - 如何使用 Laravel 为不同的客户使用不同的数据库?