zbp实现多词搜索

zblog最简单的方法实现多词搜索功能。可直接实现网站的多词搜索,也可以用作其它表内数据的多词搜索。

首先确保你已经在$where上加了搜索的数组。

比如这样

array(...,array('search','log_Title','log_Content','test test2'),...)

然后将$where这个变量交给下面的代码来处理就好了。三种方法选其中一个

“并” 与 “或” 搜索

/**
进行 “并” 与 “或” 搜索
比如 在字段 A 和 B 下搜索  搜索“WORD1 WORD2”
则搜索的结果是: A 包含“WORD1” 并且 包含“WORD2” 或者 B 包含“WORD1” 并且 包含“WORD2”
*/
function MoreSearch_AND_OR(&$w){
    foreach ($w as $k => $v){
        if ($v[0] == 'search')
        if (count($v) > 3) {
            $str = explode(' ',preg_replace("/\s+/"," ",trim(end($v))));
            if (count($str) > 1){
                array_shift($v);
                array_pop($v);
                $s = array('or');
                foreach ($v as $fv) {
                    $ss = array('and');
                    foreach ($str as $sv) {
                        if ($sv != '')
                        $ss[] = array('like',$fv,"%$sv%");
                    }
                    $s[] = $ss;
                }
                $w[$k] = $s;
            }
            break;
        }elseif (count($v) == 3){
            MoreSearch_AND($w);
        }
    }
}

“并” 与 “并” 搜索

/**
进行 “并” 与 “并” 搜索
比如 在字段 A 和 B 下搜索  搜索“WORD1 WORD2”
则搜索的结果是: A 包含“WORD1” 并且 包含“WORD2” 并且 B 包含“WORD1” 并且 包含“WORD2”
*/
function MoreSearch_AND(&$w){
    foreach ($w as $k => $v){
        if ($v[0] == 'search') {
            $str = explode(' ',preg_replace("/\s+/"," ",trim(end($v))));
            if (count($str) > 1){
                array_shift($v);
                array_pop($v);
                foreach ($v as $fv) {
                    foreach ($str as $sv) {
                        if ($sv != '')
                        $w[] = array('like',$fv,"%$sv%");
                    }
                }
                array_splice($w,$k,1);
            }
            break;
        }
    }
}

“或” 与 “或” 搜索

/**
进行 “或” 与 “或” 搜索
比如 在字段 A 和 B 下搜索  搜索“WORD1 WORD2”
则搜索的结果是: A 包含“WORD1” 或者 包含“WORD2” 或者 B 包含“WORD1” 或者 包含“WORD2”
*/
function MoreSearch_OR(&$w){
    foreach ($w as $k => $v){
        if ($v[0] == 'search') {
            $str = explode(' ',preg_replace("/\s+/"," ",trim(end($v))));
            if (count($str) > 1){
                array_shift($v);
                array_pop($v);
                $s = array('like array');
                $ss = array();
                foreach ($v as $fv) {
                    foreach ($str as $sv) {
                        if ($sv != '')
                        $ss[] = array($fv,"%$sv%");
                    }
                }
                $s[] = $ss;
                $w[$k] = $s;
            }
            break;
        }
    }
}

插件下载:

多词搜索插件:MoreSearch.zba


相关文章

发表评论 取消回复

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