【问题标题】:MySQL: unexpected behaviour 'in boolean mode'MySQL:“布尔模式”中的意外行为
【发布时间】:2010-02-14 11:07:02
【问题描述】:

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

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 ) 

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

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

【问题讨论】:

  • 您确定提交的任何内容的描述中都有mp4吗?

标签: mysql boolean match


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    您的问题是最小字长,默认为 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 的备注。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多