繁体   English   中英

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

[英]PHP: find 3-char words in query string to augment MySQL full-text search

我正在使用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 ,否则我现在要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完全匹配)。

这对我来说不是很优雅,但是可以解决问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM