和之前写的如何让Discuz!X3对文章进行全文检索开头语一样:这个检索是直接用like来弄的,所以,如果你的站数据量大,这样很吃系统,自己掂量着办!!!

下面来说步骤:
1.

网站目录\source\class\table\table_forum_post.php

打开本文件,搜索:

class table_forum_post extends Discuz!_table
{

在其后添加方法:


public function fetch_all_by_sql($where, $order = '', $start = 0, $limit = 0, $count = 0, $alias = '') {
$where = $where && !is_array($where) ? " WHERE $where" : '';
if(is_array($order)) {
$order = '';
}
if($count) {
return DB::result_first('SELECT count(*) FROM '.DB::table($this->_table).' %i %i %i '.DB::limit($start, $limit), array($alias, $where, $order));
}
return DB::fetch_all('SELECT * FROM '.DB::table($this->_table).' %i %i %i '.DB::limit($start, $limit), array($alias, $where, $order));
}

2.

网站目录\source\module\search\search_forum.php

打开文件,搜索:

				while($thread = DB::fetch($query)) {
$ids .= ','.$thread['tid'];
$num++;
}

在其下添加如下代码:

				if($num==0){
list($srchtxt, $srchtxtsql) = searchkey($keyword, "message LIKE '%{text}%'", true);
$query = C::t('forum_post')->fetch_all_by_sql(' 1 '.$srchtxtsql, 'ORDER BY tid DESC ', 0, $_G['setting']['search']['portal']['maxsearchresults']);
foreach($query as $article) {
$ids .= ','.$article['tid'];
$num++;
}
}

上述代码的意思是,如果搜索结果是0,则对帖子内容进行like形式的搜索,再次说明,like搜索会对系统造成不小的压力,自己掂量着来啊~

本文实现方法比较弱智,但是网站没此类解决办法,所以记录发布出来,供孩子们使用。转载请务必带上我的链接~谢谢。

至此,Discuz!X3对帖子内容实现like形式的全文检索讲解完毕。

Related Posts: 如何让Discuz!X3对帖子内容实现like形式的全文检索 :