【问题标题】:MySQL Full-Text search starting with short word fails以短词开头的 MySQL 全文搜索失败
【发布时间】:2020-04-29 16:17:22
【问题描述】:

我在 PHP 中使用这样的查询来按标题和内容查找帖子:

SELECT * FROM `db_table` WHERE MATCH(ptitle, pcontent) AGAINST ("+'.$search.'*" IN BOOLEAN MODE)

它工作得很好,但是当搜索以西班牙语文章('el','la')这样的短词开头时我遇到了麻烦。

例如,当我试图在其他帖子中查找标题为“El Perro”的帖子时,我执行以下搜索并得到:

  • “El Perro”-> 什么都没有。
  • “Perro”-> 找到。
  • "El" -> 返回其他帖子,但不是我要查找的帖子。
  • “Perro El Perro”-> 找到。

显然,当搜索以短词开始时会出现问题。我该如何解决这个问题?

【问题讨论】:

    标签: mysql search full-text-search


    【解决方案1】:

    在全文中,单词的长度有最小值

    默认情况下,长度小于 3 个字符或大于 84 个字符的单词 长度字符不会出现在 InnoDB 全文搜索中 指数。最大和最小字长值可使用 innodb_ft_max_token_size 和 innodb_ft_min_token_size 变量。

    https://dev.mysql.com/doc/refman/8.0/en/fulltext-stopwords.html

    您可以通过修改 sql.ini 中的值来更改此限制

     [mysqld]
     ft_min_word_len = 3
    

    默认值为4,上面将其更改为3。您可以更改 ft_max_word_len 同理:

     [mysqld]
     ft_max_word_len = 150
    

    【讨论】:

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