MySQL:全文搜索出错 - 返回NO结果

时间:2012-05-09 20:11:19

标签: mysql

我有一张表places(name vachar(50), address text, description text) engine = MYISAM并且记录很少。

我一直在尝试在here中做一些示例,并搜索“全文问题”,但我还不清楚全文搜索。

首先,我通过以下方式添加全文索引:

ALTER TABLE places ADD FULLTEXT(name, address, description);

并尝试mySQL:

SELECT * FROM places WHERE MATCH(name,address,description) AGAINST('my search key');

我尝试了一些'我的搜索键',内容在很多领域,但有一些情况我得到了:

  • 现在已选中行。

  • 如果我尝试add option "IN BOOLEAN MODE" in AGAINST(),得分= 1的结果,我对它进行排序时没有意义。

  • 只显示“搜索键”在字段(名称)中包含内容时的结果。

我尝试了很多方法,但我不记得所有情况,

任何答案都有帮助!

提前致谢!

3 个答案:

答案 0 :(得分:7)

确保您的关键字不是stop word。要disable or modify the stop word list,您需要访问设置系统变量并重新启动服务器。

另外,请确保您的关键字符合minimum full text word length。默认最小长度为4.

最后,确保该单词出现在少于50%的记录中。如果单词出现在50%或更多的记录中,MySQL将不会返回结果。

答案 1 :(得分:2)

除了马库斯的回答:

当我第一次开始使用MySQL中的FULLTEXT索引时,我遇到了空结果的问题 - 我避免使用停止的单词,而且还使用了足够长的单词,所以我有点头疼,直到我发现它埋在{{{ 3}}:

  

当您首次尝试全文搜索以查看其工作方式时,50%阈值具有重要意义:如果您创建一个表并仅在其中插入一行或两行文本,则文本中的每个单词都出现在至少50%的行。因此,没有搜索会返回任何结果。一定要插入至少三行,最好是多行。需要绕过50%限制的用户可以使用布尔搜索模式

这也解释了当您将查询设置为操作IN BOOLEAN MODE时获得结果(但具有“无意义”分数)的原因

答案 2 :(得分:0)

我遇到了同样的问题,查询在过去一直有效,突然我的测试开始失败。我设法隔离了查询,实际上,它没有返回任何结果。我使用的是boolean mode,所以50%的规则不可能引起此问题。

我通过运行以下方法解决了该问题:

OPTIMIZE TABLE organizations; # replace table name

我认为有时候,当您进行大量写入/删除操作时,MySQL索引会停止工作。奇怪的是我没有出现错误。

相关问题