使用ik+MySQL的搜索引擎进行查询,ik用于分词,mysql利用match和against函数进行模糊查询,mysql FULLTEXT:
$where['part_id'] = ['=', ':part_id'];
        $bind['part_id']  = [$this->part_id, \PDO::PARAM_STR];
        $columns = 'blogid,uid,username,subject,viewnum,hot,noreply,friend,sharetimes';
        $list  = Db::name('pre_home_blog')
            ->field($columns)
            ->where($where)
            ->where(function ($query) use ($uids, $blogids,$filter) {  
                if(isset($filter['name']) && !empty($filter['name'])){
                    $query->where("MATCH (name) AGAINST ('{$filter['name']}' IN NATURAL LANGUAGE MODE)");
                }
                if(isset($filter['username']) && !empty($filter['username'])){  
                    $query->where("MATCH (username) AGAINST ('{$filter['username']}' IN NATURAL LANGUAGE MODE)");
                }
                if($uids){
                    $query->whereIn('uid', $uids);
                }
                if($blogids){
                    $query->whereIn('blogid',$blogids);
                }
            })
            ->bind($bind)
            ->page($this->page, $this->limit)
            ->select()
            ->toArray();