XenForo的SimilarThreads插件非常好用,效率也很高,以前的版本对中文支持不错,自从升级到XF2以后就不行了,需要手动修改一点代码,估计与ES搜索有关,以前用的elasticsearch是集成中文的,后来可以直接安装ES6.5后加装IK分词。

本修改的前提是XENFORO的搜索使用XFES增强搜索,且在SimilarThreads后台选项中启用 Multibyte

修改文件src/addons/Andy/SimilarThreads/Repository/SimilarThreads.ph

在第528行(// prepare search words)区域下面添加中文分词函数:

    //########################################
    // prepare search words
    //########################################

    //中文分词
    function str_split_unicode($str, $l = 0) {
        if ($l > 0) {
            $ret = array();
            $len = mb_strlen($str, "UTF-8");
            for ($i = 0; $i < $len; $i += $l) {
                $ret[] = mb_substr($str, $i, $l, "UTF-8");
            }
            return $ret;
        }
        return preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY);

   }

然后下面:

    if ($multibyte)
    {           
        // put into array
        $threadTitleArray = mb_split(' ', $threadTitle);
    } 

修改为:

    if ($multibyte)
    {           
        // put into array
        //$threadTitleArray = mb_split(' ', $threadTitle);
        $threadTitleArray = str_split_unicode($threadTitle,3);
    } 

请注意后面的参数3与SimilarThreads后台选项中的 Minimum common word length 的选项一致

发表评论

电子邮件地址不会被公开。 必填项已用*标注