您的位置:首页 > 运维架构 > 网站架构

BlogEngine.Net架构与源代码分析系列part5:对象搜索——IPublishable与Search

2008-11-07 11:11 549 查看
从这篇文章开始我会引入一些领域上的知识或者给出一些参考文章来供大家阅读,我们对这些领域上的知识没有必要深挖,只要大概了解一下就可以了,这对于我们分析BlogEngine.Net会有很大的帮助。在这篇文章中我主要向大家介绍一下BlogEngine.Net的搜索部分的实现以及支持的相应标准等。

先用自己的话解释一下什么是开放搜索

开放搜索应该也是一种标准了,现在它越来越流行起来,记得我第一次见到这个东东是在codeproject中。大家一定注意到了IE7右上角的那个小工具栏了,

namespace BlogEngine.Core

2public static List<IPublishable> Hits(string searchTerm, bool includeComments)

7

18public static List<IPublishable> ApmlMatches(XmlDocument apmlFile, int maxInterests)

19private static void Post_Saved(object sender, SavedEventArgs e)

5private static List<Result> BuildResultSet(string searchTerm, bool includeComments)

5{

6{ ' ' }, StringSplitOptions.RemoveEmptyEntries);

9{

13{

16{

27{

33 result.Item = entry.Item;

34 results.Add(result);

35 }

36 }

37

38 results.Sort();

39 return results;

40}
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类的内核实现比较好,结构很清晰。

领域知识文章参考

1.使用 RSS 和 Atom 实现新闻联合

2.浅述RDF,畅想一下FOAF应用

3.OPML 详解

三人行,必有我师!

上一篇:BlogEngine.Net架构与源代码分析系列part4:Blog全局设置——BlogSettings

下一篇:BlogEngine.Net架构与源代码分析系列part6:开放API——MetaWeblog与BlogImporter

返回到目录
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐