2

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

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 ) 

不返回任何东西,所以基本上它似乎在搜索中被忽略了

有人知道如何解决这种行为吗?

4

2 回答 2

2

mysql 的布尔模式只会匹配超过一定长度的单词。而且mp4太短了。您必须重新编译 mysql 才能更改阈值

编辑:事实证明,现在可以通过配置文件进行设置,请参阅http://dev.mysql.com/doc/refman/5.0/en/fulltext-fine-tuning.html以获取更多参考

于 2010-02-14T11:10:02.080 回答
1

您的问题是最小字长,默认为 3 个字符。尝试相同的方法+snowboard +scooter,您会发现它有效。(当然,假设您的数据库中没有滑板车)。

请参阅微调 MySQL 全文搜索以了解如何更改它:

要索引的单词的最小和最大长度由ft_min_word_lenft_max_word_len系统变量定义。(请参阅第 5.1.4 节,“服务器系统变量”。)默认最小值是四个字符;默认最大值取决于版本。如果更改任一值,则必须重建 FULLTEXT 索引。例如,如果您想搜索三个字符的单词,您可以通过将以下行放在选项文件中来设置 ft_min_word_len 变量:

[mysqld] ft_min_word_len=3

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

于 2010-02-14T11:10:49.677 回答