discuzx3.1文章进行全文检索的实现方法

所属分类: CMS教程 / discuz 阅读数: 1613
收藏 0 赞 0 分享

首先说明啊,这个检索是直接用like来弄的,所以,如果你的站数据量大,这样很吃系统,自己掂量着办,我研究了下利用sphinx的,结果搞定了才发现这个只是针对论坛的帖子。搜索门户中的文章,并不是按这个走的,而且利用sphinx这个啊,要么只能分中文要么只能分英文(学艺不精没细了解啊,个人测试是这样的)。而我目前碰到的要求是需要对文章也执行like。所以,经过研究,类比了下搜索文章标题的功能,成功实现了discuzX3对门户中的文章进行全文检索的功能,以下操作方法discuz版本为20140101的X3.1。具体方法如下:

1.用notepad++或其他文本编辑器打开下述文件

网站目录\source\class\table\table_portal_article_content.php
2.在下面的

复制代码
代码如下:

class table_portal_article_content 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));
}

变为:

复制代码
代码如下:

class table_portal_article_content 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));
}

上面添加那个方法才能用$query = C::t(‘portal_article_content’)->fetch_all_by_sql。

3.打开

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

搜索

复制代码
代码如下:
</p> <p> foreach($query as $article) {
$ids .= ','.$article['aid'];
$num++;
}

在其后添加如下代码:

复制代码
代码如下:

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

上面代码的意思是,如果搜标题没搜到,那就用like来搜文章的内容。
保存后,更新下discuz的缓存,搜文章里的内容试试,如果能搜到,OK,大功告成~

更多精彩内容其他人还在看

火车头 Discuz-X 1.0 论坛免登陆发布接口

选择您网站对应的接口文件.如您网站是gbk编码,请选择 jiekou_gbk.php,如果您论坛是utf8编码,请选择 jiekou_utf8.php.
收藏 0 赞 0 分享

火车头Discuz 7.2 免登陆帖子发布接口

该接口仅适用于发布主题或回复到到Discuz 7.2 论坛.
收藏 0 赞 0 分享

火车头 SupeSite7.5 文章免登陆发布接口发布

可以达到和手工发布文章完全一样的效果,包括指定发布时间,插入分页符等功能.
收藏 0 赞 0 分享

巧用五招提升Discuz!X运行速度

Discuz!X自它诞生以来就饱受争议,无论是正面的还是侧面的,它被康盛推出了,那么,它就有他的优势之所在,而discuz作为我们站长运营过程中必不可少的程序之一,它的整体优化也是十分让人关心的。
收藏 0 赞 0 分享

Discuz X1.5 htaccess和httpd.ini文件设置

检查论坛所在目录中是否存在 .htaccess 文件,如果不存在,请手工建立此文件。
收藏 0 赞 0 分享

Discuz!X1.5去掉Powered by Discuz!修改的方法

Discuz!X1.5去掉Powered by Discuz!的方法,需要的朋友可以参考下。
收藏 0 赞 0 分享

DiscuzX1.5 真正的IIS7用无错URL静态化规则

在康盛的论坛里找到了可以用的伪静态规则,经验证可以使用,下面是规则
收藏 0 赞 0 分享

安装Discuz X1.5网址后面带端口的解决方法

新安装的Discuz!X1.5后,网站会自动识别出PHP所在服务端口800,并在所有链接上自动添加,导至程序无法正常访问请问该如何解决
收藏 0 赞 0 分享

Discuz! X1.5插件制作学习之旅 推荐

Discuz! X1.5插件制作学习之旅 推荐,使用discuz的朋友可以参考下。
收藏 0 赞 0 分享

Discuz-x 默认模板目录结构说明

本文介绍默认模板的目录文件结构,每个页面使用的模板文件,方便大家在模板制作中准确定位文件,提供效率。
收藏 0 赞 0 分享
查看更多