2013-05-08 107 views
3

我完全被这一个困惑。MYSQL MATCH ...对于没有结果返回

我目前正在一个电子商务网站上工作,并且有一张满载测试产品的表格。在这个表中是一个名为'name'的字段,它是TEXT类型并且具有FULLTEXT索引。

我插入了几百行虚拟数据,每一行都插入了“测试产品”(不带引号),因为它是'name'字段中的值。

但是,即使单词'product'当前位于每行的名称字段中,运行以下命令也会返回零结果。

从那里MATCH(名)反对(“产品”)

我已经检查了服务器变量产品 SELECT名字,一切都被设置为默认值。最小字符是4,停用词是默认等。据我所知,产品不是停用词。

如果有任何进一步的信息可以帮助我找到解决方案,请告诉我。

非常感谢提前。

+0

'SELECT名称FROM产品WHERE名称LIKE“%产品%”'? – phpisuber01 2013-05-08 13:37:22

+1

我认为所有行都通用的字符串被认为是“太常见”,因此被忽略。 – hjpotter92 2013-05-08 13:39:44

+0

我使用MATCH ... AGAINST的原因是,我可以建立一个强大的搜索引擎,搜索每个产品的名称和说明,最终以便我可以按最相关的顺序排列它们。 LIKE在任何接近相同结果的地方都无法实现,因为它不会根据匹配有多接近来排序结果,它只是返回具有相等相关性的所有内容。 感谢您的回应! – 2013-05-08 13:40:13

回答

5

MySQL documentation on Fulltext searches开始,由于相关字符串出现在所有行中,因此您的搜索查询被认为是触发了一个停用词。

的50%阈值有显著含义,当你第一次尝试 全文搜索,看看它是如何工作的:如果你创建了一个表 插入只有一两行文字进去,每一个字文本 发生在至少50%的行中。因此,没有搜索返回任何 结果。一定要插入至少三行,最好多插入多个。谁需要绕过50%的限制,可以使用布尔 搜索模式

这里用户来说是一个链接,指的Boolean Full-Text Searches

+0

感谢您的快速响应。这是我的问题的答案! 这很有趣,我一直在使用匹配...反对多年,从来没有来过这个问题! 再次感谢您的帮助。 – 2013-05-08 13:49:20

+0

我有一个只有一行的表(测试数据)相同的问题。 MATCH()AGAINST()子句返回零结果,即使该字段包含该单词。在添加两个包含不同文本的行之后,搜索工作正常。感谢澄清。 – 2016-11-27 04:04:47