【问题标题】:MySQL MATCH AGAINST not giving resultMySQL MATCH AGAINST 没有给出结果
【发布时间】:2019-05-17 18:29:16
【问题描述】:

我做了一个带有 MATCH AGAINST 的 MySQL 语句。我不习惯用这个功能,但是看起来很简单。

但是当我使用这个查询时:

SELECT productnaam, 
       productomschrijving, 
       MATCH (productnaam, productomschrijving) AGAINST('Kop van Jut'), 
       MATCH (productnaam, productomschrijving) AGAINST('Springkussen')
FROM product
WHERE product.productid in (508, 578)

我得到这些输出:

我真的不明白为什么“Kop van Jut”的值没有大于零。我也尝试过使用双引号、加号等。没有任何效果。

谁能告诉我我做错了什么?

【问题讨论】:

  • 因为你匹配的是MATCH (productomschrijving, productomschrijving) AGAINST('Kop van Jut'),而不是MATCH (productnaam, productomschrijving) AGAINST('Kop van Jut'),
  • 不,抱歉。那是我的错误;我已经尝试了很多东西。而且:SELECT productnaam, productomschrijving, MATCH (productnaam, productomschrijving) AGAINST('+"Kop van Jut"'), MATCH (productnaam, productomschrijving) AGAINST('+"Springkussen"') FROM product WHERE product.productid in (508 , 578) 给出相同的结果。
  • 你的表是 MyISAM 还是 InnoDB?
  • @Nick 是 MyISAM。

标签: mysql match-against


【解决方案1】:

'Kop van Jut' 返回 0 结果的原因是您的搜索字符串中的单词太短。对于 MyISAM 表,在全文搜索中考虑的最小字长为 4 个字符。来自manual

  • 有些词在全文搜索中会被忽略:

    任何太短的单词都会被忽略。全文搜索找到的默认最小单词长度为三个字符 InnoDB 搜索索引,或者 MyISAM 的四个字符。

如果您可以设置系统变量,则可以将 ft_min_word_len 的值调整为 3,以使您的匹配适用于该特定搜索字符串。

【讨论】:

  • 这就是问题所在。从来不知道这个。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-01
  • 2012-05-22
相关资源
最近更新 更多