DNN搜索实现的学习和疑问
1. DNN搜索的索引库的建立:http://esshs.cnblogs.com/archive/2005/08/18/217808.html
2. DNN搜索内容数据库的实现:http://esshs.cnblogs.com/archive/2005/08/15/215491.html
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团队,不知道为什么连回音都没有,郁闷啊。