代码之家  ›  专栏  ›  技术社区  ›  bjudson

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

  •  2
  • bjudson  · 技术社区  · 15 年前

    我正在CakePHP站点上开发一个简单的MySQL全文搜索功能,注意到MySQL从查询中去掉了短单词(3个字符或更少)。网站中的一些项目有3个字符的标题,但是,我想包括在结果他们。(由于预算限制,我已经排除了使用Solr等更强大的搜索工具的可能性)

    explode() 字符串并使用 strlen() LIKE 搜索标题字段,只是为了确保没有遗漏任何明显应该出现在结果中的内容。

    是的,我知道 ft_min_word_len 在MySQL中设置。我想我不想这么做。

    2 回复  |  直到 15 年前
        1
  •  1
  •   Mark Baker    15 年前

    有一个名为ft\u min\u word\u len的系统选项,通过它可以定义要索引的单词的最小长度。您可以将这个配置指令的值设置为较低的值(例如2):它位于MySQL配置文件的[mysqld]部分下。此文件通常位于/etc/mysql或/etc下。在windows中,您可以在windows目录或mysql主文件夹下查找。

    [mysqld]
    ft_min_word_len=2
    
        2
  •  0
  •   bjudson    15 年前

    我现在还是坚持我原来的想法,除非有人有更好的方法不参与 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分,这样返回的记录就可以和其他全文搜索结果一起排序(我选择了一个相对较高的分数,因为它与 标题 记录在案)。

    推荐文章