PHP:在查询字符串中查找3个字符的单词以增强MySQL的全文搜索

我正在CakePHP网站上开发一个简单的MySQL全文搜索功能,并注意到MySQL从查询中删除了短字(3个字符或更少)。但是,网站中的某些项目有3个字符的标题,我想将它们包含在结果中。 (由于预算限制,我已经排除使用像Solr这样更强大的搜索设备) 所以我想在查询字符串中找到任意3个字符的单词,并在标题字段上进行快速查找。我能想到的最简单的方法是将字符串
explode()
并用
strlen()
迭代生成的数组,找到3个字符的单词。然后我会接受这些话并在标题字段上进行
LIKE
搜索,只是为了确保结果中显然没有错过任何内容。 有更好/更简单的方法来解决这个问题吗? 更新:是的,我知道MySQL中的
ft_min_word_len
设置。我不认为我想这样做。     
已邀请:
有一个名为“ft_min_word_len”的系统选项,您可以通过该选项定义要编制索引的最小字长。您可以将此配置指令的值设置为较低的值(例如2):它位于MySQL配置文件的[mysqld]部分下。该文件通常位于“/ etc / mysql”或“/ etc”下。在Windows中,您可以在windows目录或MySQL主文件夹下查看。
[mysqld]
ft_min_word_len=2
    
我现在正按照我最初的想法,除非有人有更好的方法不涉及
ft_min_word_len
。 (如果我可以在每个数据库级别上使用它,我可能会考虑它 - 但是否则它太深远了。) 我有这样的功能:
    $query = str_replace(array(',', '.'), '', $query);
    $terms = explode(' ', $query);
    $short = '';

    foreach($terms as $term){
        if(strlen($term) == 3){
            $short .= '"'.$term.'", ';
        }
    }

    if(!empty($short)){
        $short = trim($short, ', ');
    }

    return $short;
然后我使用返回的字符串搜索
title
列:
WHERE title IN ($short)
,以补充全文搜索。我随意指定3.5的分数,以便返回的记录可以与其他全文搜索命中一起排序(我选择了相对较高的分数,因为它与记录的
title
完全匹配)。 这对我来说并不是很优雅,但它解决了这个问题。     

要回复问题请先登录注册