0

在此处输入图像描述

大家好,

我创建了这个简单的表,在名为 XAMMP 的数据库中称为经典。我正在尝试对我认为我理解的作者姓名进行 MATCH AGAINST 搜索。

此外,我已确保该表是 FULLTEXT 索引,根据需要包括作者和标题列。该表也是 MyISAM 类型。

我试过这个,但失败了。

从经典中选择作者 WHERE MATCH(author) AGAINST('Charles');

我知道查尔斯必须出现在作者列中,正如您所见,但我没有返回任何行。

现在,如果我将其重写给任何其他作者,它就可以了

SELECT author FROM classics WHERE MATCH(author) AGAINST ('jane');

这是我和简一起得到的……

在此处输入图像描述

我不确定,但似乎早些时候我必须在查询中包含我索引的两个字段,而不仅仅是能够单独搜索作者。这是正确的吗?有人知道为什么我不能让查尔斯回来吗?

非常感谢!。

4

1 回答 1

1

它不会返回这些行,因为“charles”出现在 50% 的行中。这是 MySQL FULLTEXT 搜索的一个有据可查的限制。

如果你想绕过这个限制,你可以使用BOOLEAN MODE.

这是手册的相关摘录:

匹配表中一半行的单词不太可能找到相关文档。事实上,它很可能会找到大量不相关的文档。我们都知道,当我们尝试使用搜索引擎在 Internet 上查找内容时,这种情况经常发生。正是由于这种推理,包含该词的行被赋予了它们出现的特定数据集的低语义值。一个给定的单词可能在一个数据集中达到 50% 的阈值,但在另一个数据集中则不会。

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

于 2012-05-14T16:46:33.287 回答