我使用以下调用从数据库获取信息:
select *
from submissions
where
match( description ) against ('+snowboard' in boolean mode )
and (!disabled or disabled='n')
order by datelisted desc limit 30
这意味着找到描述中“滑雪板”的所有内容。现在问题出在这里:
select *
from submissions
where
match( description ) against ('+snowboard +mp4' in boolean mode )
and (!disabled or disabled='n')
order by datelisted desc limit 30
由于某种原因将忽略+ mp4并返回与第一个查询相同的
select *
from submissions
where
match( description ) against ('+mp4' in boolean mode )
不会返回任何内容,所以基本上它似乎在搜索中被忽略
有人知道如何解决这种问题吗?
答案 0 :(得分:2)
mysql的布尔模式只匹配长度超过一定长度的单词。并且mp4
太短了。你必须重新编译mysql来改变门槛
编辑:事实证明,现在可以通过配置文件设置,请参阅http://dev.mysql.com/doc/refman/5.0/en/fulltext-fine-tuning.html以获取更多参考资料
答案 1 :(得分:1)
您的问题是最小字长,默认情况下为3个字符。
尝试与+snowboard +scooter
一样,你会发现它有效。 (当然,假设您的数据库中没有滑板车。)
请参阅Fine-Tuning MySQL Full-Text Search了解如何更改它:
要编制索引的单词的最小和最大长度由
ft_min_word_len
和ft_max_word_len
系统变量定义。 (请参见第5.1.4节“服务器系统变量”。)默认最小值为四个字符;默认最大值取决于版本。如果更改任一值,则必须重建FULLTEXT索引。例如,如果要搜索三个字符的单词,可以通过将以下行放在选项文件中来设置ft_min_word_len变量:
[mysqld] ft_min_word_len=3
然后重新启动服务器并重建您的FULLTEXT索引。请特别注意此列表后面的说明中有关myisamchk的评论。