BlogEngine.Net架构与源代码分析系列part5:对象搜索
); 11 } 12 else 13 { 14 BuildCatalog();// 否则重建目录 15 } 16 } 17} 这里又体现了BusinessBase提供的静态事件确实很灵活(请参照我的第二篇文章)。Hits方法的的主逻辑是执行BuildResultSet来构造结果集,BuildResultSet使用正则表达式来进行匹配,并按照一定的匹配度算法进行了结果排序:
ApmlMatches的原理也差不多,这里就不再重复了。 在Search类中,请大家在阅读源代码时注意一下对于一些字符的过滤处理是如何实现的,还有Search中对外公布的几个事件。Entry和Result是为查询时数据的交换而定义的,而Result还实现了IComparable<Result>来对结果排序使用。Search这部分代码给我的感觉就是结构很清晰,但是处理的逻辑很复杂。 那么客户端如何使用Search中的方法? 对于Search方法的调用,一般有两种方式,一种形式如: List<IPublishable> list = Search.Hits(term, includeComments); term就是输入的关键词,includeComments为是否包含评论,list是已排序的搜索结果。另一种形式是: list = Search.ApmlMatches(docs[key], 30); 这是根据一个Uri上的一个Apml文件来对查找结果进行输出,Apml也是一种标准文件,用来定义互联网上一些关键词的活跃程度(自己的话),在BlogEngine.Net中实际上也支持这种Apml,同样也是通过HttpHandler实现的。对于客户端的使用大家可以具体参照一下Web项目中Search.aspx文件中的CodeBehind,此外BlogEngine.Net在Web项目中的Wdiget中也有一个客户端查询,这个以后会在讲解Wdiget时做更多的说明。 总结 1.BlogEngine.Net的搜索还是很经典的,支持开放搜索和Apml等标准。 2.IPublishable的定义很有必要而且处理得很巧妙,解决了搜索对象的统一性问题,以便统一处理。 3.Search类的内核实现比较好,结构很清晰。 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |