大家好,
我创建了这个简单的表,称为DB中的经典,称为XAMMP上的出版物。我正在努力寻找一个我认为理解的作者名称。
另外,我确保该表是FULLTEXT索引,根据需要包括作者和标题列。该表也属于MyISAM类型。
我试过了,但失败了。
SELECT author FROM classics WHERE MATCH(作者)AGAINST('Charles');
我知道Charles必须出现在作者列中,它就像你看到的一样,但我没有返回任何行。
现在,如果我将其重新发送给任何其他作者,那么它可以正常工作
SELECT author FROM classics WHERE MATCH(作者)AGAINST('jane');
以下是我与简相关的事情......
我不确定,但似乎早些时候我必须包含我在查询中编入索引的两个字段,而不仅仅是能够单独搜索作者。这是正确的,有谁知道为什么我不能让查尔斯回来?。
非常感谢!
答案 0 :(得分:1)
它没有返回那些行,因为“charles”出现在50%的行中。这是MySQL FULLTEXT搜索的详细记录限制。
如果您想绕过此限制,可以使用BOOLEAN MODE
。
以下是manual的相关摘录:
与表中一半行匹配的单词不太可能找到相关文档。事实上,它很可能找到大量无关的文件。我们都知道,当我们试图通过搜索引擎在互联网上找到某些东西时,这种情况经常发生。正是由于这种推理,包含该单词的行被分配了它们出现的特定数据集的低语义值。给定的单词可能在一个数据集中达到50%的阈值而不是另一个数据集。
当您第一次尝试全文搜索以查看其工作方式时,50%阈值具有重要意义:如果您创建一个表并仅在其中插入一行或两行文本,则每个单词在文本中出现至少50%的行。因此,没有搜索会返回任何结果。一定要插入至少三行,最好是多行。需要绕过50%限制的用户可以使用布尔搜索模式;请参见第12.9.2节“布尔全文搜索”。