3.
DNN
的关键字比较算法的实现:
http://www.cnblogs.com/henry_zjk/archive/2005/03/23/123843.html
,
http://www.cnblogs.com/esshs/archive/2005/08/12/213154.html
。
一直对搜索功能的实现存在好奇。在学习
DNN
时也特意看了下它的搜索的实现。由于对
asp.net
的站点建设缺少经验。看
DNN
时比较吃力。多亏有各位前辈的
blog
帮助。使得我的学习得以进行下去。这也是我写这个随笔的目的。本身并没有太多的新发现,只是至少为后来人提供一个快速上手的索引,更希望各位看过之后能对我理解上的问题和不了解得地方给与指出和指导。
主要想介绍一下我理解的
DNN
中
search
实现涉及到的流程和类。
DNN
的搜索是基于索引的。而不是基于全文的。具体算法和基于中文的改进从推荐的文档中可以看到。
一方面,从搜索的实现流程来说。先从
searchInput
模块的文本框中中键入关键字。点击按钮后激活的是
searchInput.ascx.vb
的
SearchExecute()
方法。该方法将关键字提交给
Url
并定位到结果页面。由
searchResult
模块的
BindData()
方法。此方法将数据绑定在
DG
上。进行运算并取出数据是由
SearchDataStore(Inherits SearchDataStoreProvider)来实现的。(UI层和BLL层分工明确)
另一方面,从索引的收集和建立上来说。每一个希望被搜索到的模块必须实现Isearchable接口(上面的文章1有很详尽的说明)。而索引的重建由SearchEngine来做。它还调用了另一个Provider——ModuleIndexer(Inherits IndexingProvider)。而时机可有调度线程或手动来控制。
我现在还不清楚的是DNN中的Url系统。HttpModule掌握的不好。希望大家指点。感谢各位前辈的劳动,使他们的Blog让我的学习能比较轻松。一直在申请加入DNN团队,不知道为什么连回音都没有,郁闷啊。
本文转自 duguguiyu 51CTO博客,原文链接:http://blog.51cto.com/duguguiyu/362839,如需转载请自行联系原作者