在了解这个功能之前,我是想在插件中实现一个搜索自定义表的功能。最普通的方法就是select每次的数据。但这样很显然是最初级的方法。就想了解一下DX在这块是怎么实现的呢?是不是更高级一些。在看代码之前问了一下同事,DX的搜索没啥好看的。大站要用纵横搜索,要不搜索的压力很大。恩,我想也是的。搜索这块是要单独地处理才能应付大搜索量大数据量。但是纵横搜索目前不能对系统中自定义的内容提供搜索。所以你要做一些东西,初期还是需要自己实现的。这篇文章就写给那些想自己开发插件,并且有数据搜索功能的朋友吧。 
 
首先,论坛中搜索主要是通过论坛版面上面的searchbar。在这个searchbar里我们加上我们要搜索的自定义内容栏目。 
在 /template/default/common/pubsearchform.htm 中 
- <!--{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}-->
 
  复制代码 这段下面 加上类似这样的代码  
- <!--{block slist[boardgame]}--><li><a href="javascript:;" rel="boardgame">{lang boardgame}</a></li><!--{/block}-->
 
  复制代码 
rel是关键字,后面都要用到。{lang boardgame} 这个是在语言包中定义的中文汉字。 
 
编辑好后。在我们的search bar中就有了这项了。 
 
然后我们编辑 /search.php 文件,在 $modarray 中加入我们上面的值 boardgame 
 
- $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中的记录是有实效的。过期无效。系统中每天晚上有计划任务清除这个表。 
 
 
 |