|
本帖最后由 hbghlyj 于 2022-12-23 00:25 编辑 关键字中可使用通配符 "*"
匹配多个关键字全部,可用空格或 "AND" 连接。如 win32 AND unix
匹配多个关键字其中部分,可用 "|" 或 "OR" 连接。如 win32 OR unix
用户名中可使用通配符 "*",如 *user*
关于搜索选项:
- 按作者:此处可以填写发帖作者全名,也可以使用通配符"*",如填写"a*",就可以搜索到所有以a开头的用户发的帖子。
- 搜索方式:有“标题搜索”、“全文搜索”两种方式。
- 搜索时间:关于搜索时间的选择是个组合方式:全部时间/1天/2天/1周/1个月/3个月/6个月/1年 + 以内/以前
- 排序类型:关于排序类型的选择也是个组合方式:回复时间/发布时间/回复数量/浏览次数 + 按升序排列/按降序排列
- 搜索范围:选择要进行搜索的版块,可以按住 Ctrl 多选。
/source/module/search/search_forum.php
Discuz! X3.4 使用教程文档 » 1. 全局 » 1.14. 搜索设置
Discuz!6.0 多种搜索方式详解
[Discuz7.2]让高级搜索更全面
Discuz! X3 sphinx/coreseek全文搜索安装配置实战
DiscuzX内置的搜索功能实现。
如果搜索的是新内容,从来没有被人搜索过的内容。则DZ进行一次搜索。然后把搜索结果的id序列和一些其他信息储存在
pre_common_searchindex 表格中。
下次再有人查询这个关键字的时候。首先会查询 pre_common_searchindex 表,如果有记录的话。则从表中取到结果的id序列,直接select in来取这些记录。
当然pre_common_searchindex中的记录是有时效的。过期无效。系统中每天晚上有计划任务清除这个表。
Discuz搜索模块解析
检索完成后,discuz会将搜索结果保存到common_searchindex表中作为一次搜索记录,ids那一列即为匹配帖子的tid列表:
- $searchid = C::t('common_searchindex')->insert(array(
- 'srchmod' => $srchmod,
- 'keywords' => $keywords,
- 'searchstring' => $searchstring,
- 'useip' => $_G['clientip'],
- 'uid' => $_G['uid'],
- 'dateline' => $_G['timestamp'],
- 'expiration' => $expiration,
- 'num' => $num,
- 'ids' => $ids
- ), true);
复制代码
根据ids获取到帖子的信息后,对标题进行高亮操作,再返回给用户:
- foreach(C::t('forum_thread')->fetch_all_by_tid_fid_displayorder(explode(',',$index['ids']), null, 0, $orderby, $start_limit, $_G['tpp'], '>=', $ascdesc) as $thread) {
- $thread['subject'] = bat_highlight($thread['subject'], $keyword);
- $thread['realtid'] = $thread['isgroup'] == 1 ? $thread['closed'] : $thread['tid'];
- $threadlist[$thread['tid']] = procthread($thread, 'dt');
- $posttables[$thread['posttableid']][] = $thread['tid'];
- }
复制代码
最多只能显示500个结果
搜索通配符*会匹配一切帖子,显示
结果: 找到 “ ” 相关内容 500 个 |
| 搜索加号+也会匹配一切帖子,也显示
结果: 找到 “ ” 相关内容 500 个 |
|
|
|