当包含单词“of”时,为什么这个MySQLquery返回零结果?

时间:2013-12-07 20:10:35

标签: mysql sql select

如果此查询在搜索字词中包含+of,则返回零结果:

SELECT DISTINCT *
        FROM pin
        WHERE MATCH (
        title, 
        front, 
        back, 
        price, 
        sku, 
        datereleased, 
        edition, 
        wherefrom, 
        class, 
        categories, 
        details, 
        groups, 
        associated, 
        artist) 
        AGAINST ('+Pirates +of +the +Caribbean' IN BOOLEAN MODE)
        ORDER BY pin.id DESC

然而,当我拿出它时,我会得到1000多行:

'+Pirates +the +Caribbean'

另外,当我用短语搜索时,我会得到1000多行:

"Pirates of the Caribbean"

为什么+of显示零结果?两个字符搜索词是否以某种方式导致问题我不知道?我也注意到+to这个词也有同样的问题。

3 个答案:

答案 0 :(得分:2)

如果你想在全文搜索中包含“of”这个词,你必须做两件事

设置最小字长

您需要将ft_min_word_len设置为1,方法是将其添加到my.cnf

[mysqld]
ft_min_word_len = 1

包含更多常用字词

我写了post in the DBA StackExchange on Jan 26, 2012 about defining stopwords

默认情况下,there are 543 built-in words被认为是常见的。

建议

要创建一个禁用词列表,只需创建一个文本文件并在my.cnf

中定义它

要将三篇Enlglish文章定义为停用词,请转到操作系统并运行:

echo "a"    > /var/lib/mysql/stopwords.txt
echo "an"  >> /var/lib/mysql/stopwords.txt
echo "the" >> /var/lib/mysql/stopwords.txt
chown mysql:mysql /var/lib/mysql/stopwords.txt

如果您想要所有字词,包括aanthe,请执行以下操作:

echo -n > /var/lib/mysql/stopwords.txt
chown mysql:mysql /var/lib/mysql/stopwords.txt

接下来,将这些行添加到my.cnf

[mysqld]
ft_min_word_len=1
ft_stopword_file=/var/lib/mysql/stopwords.txt

接下来,运行service mysql restart

最后,重新索引pin表,如下所示:

REPAIR TABLE pin QUICK;

试一试!!!

答案 1 :(得分:1)

我找到了问题的答案。看起来FULLTEXT索引搜索的ft_min_word_len值默认为4个字符的单词。如果我想搜索较小的作品,我需要更改它并重建我的索引。

参考:http://dev.mysql.com/doc/refman/5.5/en/fulltext-fine-tuning.html

另外(感谢Dan Bracuk):

  

考虑50%或更多行中存在的单词   常见且不匹配。

参考:http://dev.mysql.com/doc/refman/5.5/en/fulltext-search.html

答案 2 :(得分:0)

我不知道所以我查了一下。找到this page。它包括这句话:

此外,50%或更多行中出现的单词被认为是常见的并且不匹配。