phpBB3中文论坛的二分法分词搜索修改
适用于使用论坛的搜索功能时出现如下提示的朋友
[color=#FF0000]您输入的以下字词将由于过于常见而被忽略:xxx
您必须指定至少一个关键词,且每个关键词必须为 2 到 14 个字符(包含通配符)。[/color]
#######################################################
## 名称: phpBB3中文二分法搜索
## 作者: IOsetting
## 功能描述:
## 对中文应用二分法分词, 并限制分词结果数组大小, 提高搜索准确率, 降低服务器负载
## '中文二分法' 在默认分词中, 分为 '中 文 二 分 法', 二分法中分为 '中文 文二 二分 分法'
##
## 注意:
## 此分词法对日文搜索支持不好.
## 应用此分词法会导致索引词库较原词库增长两倍到三倍, 对MySQL空间大小有顾忌的请考虑清楚
##
## 版本: Build 20080709
##
## 安装难度: Easy
## 估计时间: 1 Minutes
##
##
#######################################################
打开 includes/search/fulltext_native.php文件
1,搜索代码
[code] $exact_words = array();
preg_match_all('#([^\\s+\\-|*()]+)(?:$|[\\s+\\-|()])#u', $keywords, $exact_words);
$exact_words = $exact_words[1];[/code]
在后面添加
[code]$exact_words = array_slice ($exact_words, 0, 3);[/code]
2,搜索代码
[code] $pos = 0;
$len = strlen($text);[/code]
在后面添加
[code] $single_utf8 = true;[/code]
3,搜索代码
[code] {
$ret .= substr($text, $pos, $spn);
$pos += $spn;[/code]
在后面添加
[code] $single_utf8 = true;[/code]
4,搜索代码
[code]$ret .= ' ' . $utf_char . ' ';[/code]
[color=#FF0000]替换为[/color]
[code] if ($pos < $len){
if ($spn = strspn($text, $legal_ascii, $pos)){
if ($single_utf8){
$ret .= ' ' . $utf_char . ' ';
}
continue;
} else {
$ret .= ' ' . $utf_char;
$utf_len = $utf_len_mask[$text[$pos] & "\xF0"];
$utf_char = substr($text, $pos, $utf_len);
if (($utf_char >= UTF8_HANGUL_FIRST && $utf_char <= UTF8_HANGUL_LAST)
|| ($utf_char >= UTF8_CJK_FIRST && $utf_char <= UTF8_CJK_LAST)
|| ($utf_char >= UTF8_CJK_B_FIRST && $utf_char <= UTF8_CJK_B_LAST))
{
$ret .= $utf_char . ' ';
}
}
} else {
if ($single_utf8){
$ret .= ' ' . $utf_char . ' ';
}
}
$single_utf8 = false;[/code]
[color=#0000FF]注意,修改完,上传文件,覆盖后要 登陆后台,维护->搜索索引-> Fulltext native 删除索引, 然后再创建索引[/color]