Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

DiscuzX内置的搜索功能实现。

[复制链接]
rikioy 发表于 2011-7-29 12:25:28 | 显示全部楼层 |阅读模式
本帖最后由 rikioy 于 2011-11-29 17:32 编辑

在了解这个功能之前,我是想在插件中实现一个搜索自定义表的功能。最普通的方法就是select每次的数据。但这样很显然是最初级的方法。就想了解一下DX在这块是怎么实现的呢?是不是更高级一些。在看代码之前问了一下同事,DX的搜索没啥好看的。大站要用纵横搜索,要不搜索的压力很大。恩,我想也是的。搜索这块是要单独地处理才能应付大搜索量大数据量。但是纵横搜索目前不能对系统中自定义的内容提供搜索。所以你要做一些东西,初期还是需要自己实现的。这篇文章就写给那些想自己开发插件,并且有数据搜索功能的朋友吧。

首先,论坛中搜索主要是通过论坛版面上面的searchbar。在这个searchbar里我们加上我们要搜索的自定义内容栏目。
在 /template/default/common/pubsearchform.htm 中

  1. <!--{block slist[user]}--><li><a href="javascript:;" rel="user"{if (CURSCRIPT == 'home' && !in_array($do, array('blog', 'album', 'thread', 'activity', 'poll', 'reward', 'debate', 'trade'))) || $mod == 'ranklist'} class="curtype"{/if}>{lang users}</a></li><!--{/block}-->
复制代码

这段下面 加上类似这样的代码
  1. <!--{block slist[boardgame]}--><li><a href="javascript:;" rel="boardgame"{if ($cursearch == 'boardgame') } class="curtype"{/if}>{lang boardgame}</a></li><!--{/block}-->
复制代码
rel是关键字,后面都要用到。{lang boardgame} 这个是在语言包中定义的中文汉字。

$cursearch 这个你可以在你的程序脚本中给赋值,这样,到这个脚本,就自动切换成搜索这个了。就类似你到家园中,搜索框默认搜索的是用户。你打开版面,搜索框默认搜索的是帖子。

编辑好后。在我们的search bar中就有了这项了。

然后我们编辑 /search.php 文件,在 $modarray 中加入我们上面的值 boardgame

  1. $modarray = array('my', 'user', 'curforum', 'newthread','boardgame');
复制代码
把我们 ref 中的关键词 加入到$modarray 中。

然后在 /source/module/search/ 中加入 search_boardgame.php 文件 其中 boardgame 就是上面的ref中的值

在search_boardgame.php中写处理代码,这样我们就能用我们自己的模块处理搜索了。

dx搜索是这样做的
如果搜索的是新内容,从来没有被人搜索过的内容。则DZ进行一次搜索。然后把搜索结果的id序列和一些其他信息储存在
pre_common_searchindex 表格中。
下次再有人查询这个关键字的时候。首先会查询 pre_common_searchindex 表,如果有记录的话。则从表中取到结果的id序列,直接select in来取这些记录。
当然pre_common_searchindex中的记录是有实效的。过期无效。系统中每天晚上有计划任务清除这个表。





64243354 发表于 2011-7-29 12:29:24 | 显示全部楼层
给我看到了~谢谢啦~
回复

使用道具 举报

至尊ぉ子明 发表于 2011-9-25 23:02:21 | 显示全部楼层
学习了  
回复

使用道具 举报

-初恋情人- 发表于 2011-10-16 17:32:49 | 显示全部楼层
谢谢分享。。。。
回复

使用道具 举报

qiuyu 发表于 2011-10-31 16:21:15 | 显示全部楼层
真是太好了
回复

使用道具 举报

karlim 发表于 2011-11-18 00:58:24 | 显示全部楼层
不错的文章,用得着。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-11-23 22:26 , Processed in 0.024060 second(s), 2 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表