【问题标题】:MySQL fulltext search - workaround for numeric values and ft_min_word_lenMySQL 全文搜索 - 数值和 ft_min_word_len 的解决方法
【发布时间】:2011-03-10 14:23:28
【问题描述】:

我正在使用 MySQL 全文搜索 IN BOOLEAN MODE,但由于 my.cnf 中的 ft_min_word_len 设置强加的字符限制限制(当前在此服务器上设置为 3),在搜索字符串中遇到了数值问题)。是否有任何解决方法,以便像“something 14”这样的搜索会搜索“something”和“14”(甚至“14”),因为目前的字符限制意味着 3 位以下的数字将被忽略。由于搜索字符串中的数字片段很重要,我们需要将 ft_min_word 减少到 1 以确保所有搜索都返回正确的结果,这会使索引非常慢。一个潜在的解决方案是使用 PHP 将数字替换为对应的单词,并确保该单词也添加到可搜索的文本中,但这感觉很麻烦。

还有其他想法吗?

【问题讨论】:

    标签: php mysql search full-text-search


    【解决方案1】:

    是的,我几年前就遇到了这个问题,并且一直在为我的客户使用这个解决方案。就结果而言,它使事情进展顺利。

    基本上,它的作用是将 3 个字符以下的内容拆分为 LIKE 搜索,将 3 个字符以上的内容拆分为全文布尔搜索。我目前正在发布我的分层搜索版本。但直到我完成。我发布了它的全文部分,以便您可以使用代码。如果您有任何问题或使其变得更好。我只是要求您将它发布在我的项目托管网站上,以便它变得更好。

    完整的功能显示在源链接中。

    $parseQuery = explode(" ",$query);
    foreach($parseQuery as $key => $qvalue)
    {
            if(strlen($qvalue) > 3)
            {
                    $buildQuery .= "$qvalue ";
            }
            elseif(strlen($qvalue) >= 2)
            {
                    $buildLike[] = "`blog` LIKE '%$qvalue%'";
            }
    }
    
    if($buildLike != "")
    {
    $numCountQuery = 0;
            $countforbuilding = count($buildLike) - 1;
            foreach($buildLike as $key => $queryforLike)
            {
                    if($numCountQuery != $countforbuilding)
                    {
                            $finalBuildLike .= "$queryforLike AND";
                    }
                    else
                    {
                            $finalBuildLike .= "$queryforLike";
                    }
                    $numCountQuery++;
            }
    } 
    if(($finalBuildLike != "") && ($buildQuery != ""))
    {
    $finalBuildLike = "AND $finalBuildLike";
    }
    
    if($buildQuery != "")
    {
    $buildDescription = $buildQuery;
    $buildQuery = "MATCH(blog) AGAINST ('".trim($buildQuery)."')";
    }
    

    http://code.google.com/p/php-mysql-layered-search/

    希望这会有所帮助。

    【讨论】:

    • 感谢您的输入,但我不太喜欢这个解决方案,因为切换到 LIKE 会极大地改变结果集
    • 没问题。我也是这么想的,直到我把它作为测试并看到报告。认为 mysql 可以从一个字符上产生一个好的布尔分数在逻辑上似乎是不可能的,但总有更好的方法。让我知道你的发现。
    猜你喜欢
    • 2011-02-07
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2019-10-17
    • 2010-09-18
    • 2011-02-22
    • 2013-02-12
    • 1970-01-01
    相关资源
    最近更新 更多