使用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();