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 的选项一致