2010-11-01 48 views
2

以下两个查询返回相同的(预期的)结果当我查询我的数据库:MySQL的MATCH ... AGAINST有时会找到答案,有时不

SELECT * FROM articles 
WHERE content LIKE '%Euskaldunak%' 

SELECT * FROM articles 
WHERE MATCH (content) AGAINST ('+"Euskaldunak"' IN BOOLEAN MODE) 

在内容字段中的文本,它的搜索看起来是这样的:“......这些Euskaldunak,或新人......”

然而,在同一个表下面的查询返回预期的一个结果:

SELECT * FROM articles 
WHERE content LIKE '%PCC%' 

而下面的查询将返回空的结果:

SELECT * FROM articles 
WHERE MATCH (content) AGAINST ('+"PCC"' IN BOOLEAN MODE) 

在这一结果符合内容领域的文字是这样的:“......波特兰社区学院(PCC)是最大的......”

我想不通为什么寻找“Euskaldunak”与MATCH一起工作......反对语法,但“PCC”不是。有没有人看到我没有看到的东西?

(另外:“PCC”是不是这个领域的常用短语 - 没有其他行包含单词,所以自然语言搜索不应该被排除它)

回答

3

您的全文文本的最小字长可能设得太高。我认为默认值是4,这将解释你所看到的。如果您希望无论长度如何都索引所有单词,请将其设置为1。

运行此查询:

show variables like 'ft_min_word_len'; 

如果数值大于3,你想击中的话比短,编辑您的/etc/my.cnf,并添加或更新这条线在[mysqld]使用值适合您的应用程序部分:

ft_min_word_len = 1 

然后重启MySQL和重建全文索引,你应该准备就绪。

+0

这就是它!不幸的是我不能自己改变这个变量,我不得不要求改变它,所以我还没有尝试过这个解决方案。但事实上,这个设置是4,而不是3。 – Elizabeth 2010-11-01 21:24:02

3

有两件事我能想到的的马上。首先是你的ft_min_word_len值设置为3个以上的字符。任何小于ft_min_word_len长度的“单词”都不会被索引。

第二个是,超过50%的记录包含'PCC'字符串。与超过50%的记录匹配的全文搜索被认为是不相关的,并且不会返回任何内容。

全文索引与常规字符串索引有不同的规则。例如,有一个停用词表,所以某些常用词,如,,和,不会被索引。