9

我有一张桌子places(name vachar(50), address text, description text) engine = MYISAM和几条记录。

我一直在尝试在这里做一些例子!,并搜索“全文问题”,但我不清楚全文搜索。

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

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(),以 score =1 获得的结果,当我对其进行排序时,它是没有意义的。

  • 它只是在“搜索键”在字段(名称)中有内容时显示结果。

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

任何答案都会有所帮助!

提前致谢!

4

3 回答 3

11

确保您的关键字不是停用词。要禁用或修改停用词列表,您需要访问设置系统变量并重新启动服务器。

此外,请确保您的关键字符合最小全文字长。默认最小长度为 4。

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

于 2012-05-10T12:52:21.077 回答
7

除了马库斯的回答:

当我第一次开始在 MySQL 中使用 FULLTEXT 索引时,我遇到了空结果的问题——我避免使用停用词,并且使用了足够长的停用词,所以我有点头疼,直到我发现这被埋在MySQL 文档中:

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

这也解释了为什么在将查询设置为在布尔模式下运行时得到结果(但得分“无意义”)

于 2012-08-13T22:58:31.420 回答
0

我有同样的问题,查询在过去工作,突然我的测试开始失败。我设法隔离了查询,实际上,它没有返回任何结果。我正在使用boolean mode,所以 50% 规则不可能导致问题。

我通过运行解决了这个问题:

OPTIMIZE TABLE organizations; # replace table name

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

于 2020-08-05T15:04:40.927 回答