MySQL:布尔模式下的意外行为'

时间:2010-02-14 11:07:02

标签: mysql boolean match

我使用以下调用从数据库获取信息:

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 ) 

不会返回任何内容,所以基本上它似乎在搜索中被忽略

有人知道如何解决这种问题吗?

2 个答案:

答案 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_lenft_max_word_len系统变量定义。 (请参见第5.1.4节“服务器系统变量”。)默认最小值为四个字符;默认最大值取决于版本。如果更改任一值,则必须重建FULLTEXT索引。例如,如果要搜索三个字符的单词,可以通过将以下行放在选项文件中来设置ft_min_word_len变量:

     

[mysqld] ft_min_word_len=3

     

然后重新启动服务器并重建您的FULLTEXT索引。请特别注意此列表后面的说明中有关myisamchk的评论。