【问题标题】:mysql fulltext returns zero results even though the exact search phrase exists in the table即使表中存在确切的搜索短语,mysql全文返回零结果
【发布时间】:2011-09-01 19:15:52
【问题描述】:

我有一张叫myatts 的桌子:

  • 它有大约 3,332,834 行数据。
  • 我一般搜索“内容”栏目
  • 我有大约 40 行内容 = Rat, D.D.

但是,当我对它进行全文搜索时,我没有得到任何结果。但如果我使用 LIKE,我确实会得到结果。
我想坚持全文,谁能帮我弄清楚为什么没有返回结果?

这是我的表结构:

id  
int(11) Not null AUTO_INCREMENT

join_id     
int(11) Not Null

webid
int(11) Not Null 

content
text utf8_general_ci

这是我的索引

Keyname Type      Unique Packed      Field      Cardinality
PRIMARY BTREE     Yes    No      id             3332834     
content BTREE     No     No      content (333)  238059          
id_index    BTREE     No     No      webid      151492          
join_id BTREE     No     No      join_id        36          
content_ft  FULLTEXT  No     No      content        119029

这是我的查询:

SELECT * FROM myatts WHERE MATCH(content) AGAINST('Rat, D.D.' IN BOOLEAN MODE)

这里是解释:

1   SIMPLE  myatts  fulltext    content_ft  content_ft  0       1   Using where

任何帮助/指针都会很棒。谢谢!

【问题讨论】:

    标签: mysql full-text-search


    【解决方案1】:

    您的最小字长可能设置为 4。有关详细信息,请查看 MySQL Manual..

    【讨论】:

    • 啊,是的,我想过这个问题,但我认为我的大脑认为整个短语的长度超过了 3 个字符。我敢打赌就是这样。
    • 我需要一点时间来更改设置,看看这是否是问题所在。我想我也可以制作一个 php 脚本来检查搜索短语中的最大单词,如果它小于 4,请改用“like”?
    • 这取决于您的搜索是更自然的语言类型搜索还是独特且特定(可预测)的格式,例如型号/零件号。您还可以微调哪些字符是停用词以及如何处理连字符。阅读有关全文搜索的手册的整个部分将获得丰厚的回报。就个人而言,我会不惜一切代价避免 LIKE 类型的搜索,除非我对零件编号或专有名词(名称、地点)进行完全匹配。
    【解决方案2】:

    默认情况下,MySQL 的全文索引器会忽略长度少于 4 个字符的单词。在你的 my.cnf 中设置这个变量:

    ft_min_word_len=3
    

    你可能不想低于 3,因为你最终会得到误报。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-02
      • 2016-01-26
      • 1970-01-01
      • 1970-01-01
      • 2015-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多