【问题标题】:MySQL table MATCH AGAINSTMySQL 表 MATCH AGAINST
【发布时间】:2012-05-22 03:08:03
【问题描述】:

大家好,

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

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

我试过了,但失败了。

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

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

现在,如果我将它重写给任何其他作者,它会起作用

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

这是我从简那里得到的……

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

非常感谢!

【问题讨论】:

    标签: mysql match-against


    【解决方案1】:

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

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

    这是manual的相关摘录:

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

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

    【讨论】:

    • 后来我确实在布尔模式下绕过了它,但忘了提及,我想知道为什么,是的,我读过这个例外,但像大多数人一样是全新的,只是忘记了!!。谢谢。
    猜你喜欢
    • 2012-03-15
    • 2011-11-10
    • 2013-01-24
    • 1970-01-01
    • 1970-01-01
    • 2011-09-23
    • 1970-01-01
    • 2013-01-24
    • 1970-01-01
    相关资源
    最近更新 更多