功能解析
搜索模块的子模块有8个,相关信息如下:
子模块 | 功能 |
---|---|
album | 搜索相册。 |
blog | 搜索日志。 |
collection | 搜索收藏的帖子。 |
forum | 搜索帖子。 |
group | 搜索群组或群组帖子。 |
my | 貌似已废弃。 |
portal | 搜索门户帖子。 |
user | 搜索用户。 |
discuz的论坛搜索入口可以在/admin.php?action=setting&operation=search页面中配置。搜索项目为搜索论坛的项是直接控制论坛主页的搜索入口的,如果关闭了,论坛就没有搜索入口。各个子模块的功能实现也大同小异,下面我们分析一下主要的实现:
forum–搜索帖子
搜索的相关设置可以在admin页面->全局->搜索设置中找到。如果要支持sphinx搜索,在该页面中配置sphinx服务器。搜索帖子的主要逻辑在search_forum.php文件中,搜索有两种类型,一是标题搜索,二是全文搜索。在启用spinx的情况下,如果搜索类型为全文搜索,discuz才会用sphinx进行搜索,否则discuz会进行数据库的模糊匹配搜索,相关代码如下。模糊匹配搜索在帖子比较多的情况下执行会很耗时,需要多加注意。
if($srchtype == 'fulltext' && $_G['setting']['sphinxon']) {
...
} else {
...
$srcharr = $srchtype == 'fulltext' ? searchkey($keyword, "(p.message LIKE '%{text}%' OR p.subject LIKE '%{text}%')", true) : searchkey($keyword,"t.subject LIKE '%{text}%'", true);