如果此查询在搜索字词中包含+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
这个词也有同样的问题。
答案 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
如果您想要所有字词,包括a
,an
和the
,请执行以下操作:
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%或更多行中出现的单词被认为是常见的并且不匹配。