快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-19

IPublishable与Search

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

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

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

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

我们可以在那里选择一个搜索提供程序例如:Google,当我们输入信息回车以后就会发现页面跳转到了Google的结果页面。那么这些提供程序信息是怎么获得的呢?IE又是怎么知道要去Google的页面呢?原来是通过一个标准的XML文件,这个文件的具体格式可以参照一下codeproject的开放搜索文件http://www.codeproject.com/info/OpenSearch.xml,当把

<link rel="search" type="application/opensearchdescription+xml" title="CodeProject" href="http://www.codeproject.com/info/OpenSearch.xml"></link>

这种代码加入到一个Html的Head中,在浏览器打开这个Html文当时就会发觉里面的开放搜索文件,然后在那个小工具栏中增加一个提供程序,当我们在工具栏中输入信息并回车以后就可以直接跳转到相应的结果页面,可以看出这个XML文件充当着一种中间桥梁的作用。这种功能不仅需要浏览器的支持,同时也需要网站本身提供相应的支持,这就是开放搜索。这个和IE7中的Rss源发现机制很类似。

那么BlogEngine.Net中对于开放搜索支持是如何实现的呢

进入BlogEngine.Net的首页查看生成的Html源代码我们会看到

<link type="application/opensearchdescription+xml" rel="search" title="Name of the blog" href="http://hostname/opensearch.axd" />,

这里请求了opensearch.axd,查看Web.config我们注意到opensearch.axd交给了BlogEngine.Core.Web.HttpHandlers.OpenSearchHandler处理,这个XML是通过一个HttpHandler来生成的。在Html源代码的Head中我们会发现很多*.axd的引用,实际上它们都是使用自定义的HttpHandler来处理的,对于这些HttpHandler我会在后续有关文章中进行说明。从OpenSearchHandler生成的XML我们可以看出,执行搜索的Url为(类似Google的处理方式)http://hostname/search.aspx?q={searchTerms},searchTerms就是输入的部分,具体的搜索由页面search.aspx调用核心层内部逻辑来完成。

内部逻辑的主要部分IPublishable与Search的实现分析

BlogEngine.Net的搜索目标不是像Google那种页面抓取,也不是像我们一般的企业应用直接查询数据库数据,而是一种内存中对象的搜索。当对象完成填充以后数据就驻留在内存中,所以BlogEngine.Net的搜索目标应该是对象实例。主要通过IPublishable与Search两个类完成。首先IPublishable定义了可被搜索对象的类的共有特征,以便统一搜索模型,凡是实现了这个接口的类的对象都有机会被搜索到,例如Comment,Page,Post。

1namespace BlogEngine.Core
2{
3 /**//// <summary>
4 /// An interface implemented by the classed that can be published.
5 /// <remarks>
6 /// To implemnet this interface means that the class can be searched
7 /// from the search page and that it can be syndicated in RSS and ATOM.
8 /// </remarks>
9 /// </summary>
10 public interface IPublishable
11 {
12  /**//// <summary>
13  /// Gets the title of the object
1

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号