探索 ASP.NET Futures (Part 2 - Search Enabled)
点击次数:39 次 发布日期:2008-11-26 11:02:59 作者:源代码网
|
源代码网推荐 源代码网推荐 首先说说SearchDataSource是干什么的吧,它其实是一个ObjectDataSource的派生类,只不过设置了基类的TypeName为"Microsoft.Web.Preview.Search.SearchService",而SelectMethod则是"Search"。事实上你放置一个普通的ObjectDataSource然后设置这两个属性也就可以获得SearchDataSource的效果。之后你就可以像使用普通DataSource控件那样使用搜索返回的数据,绑定到Repeater或者GridView,又或者绑定到你自己的数据控件都是可以的。 源代码网推荐 源代码网推荐 SearchDataSource返回的貌似是一个IEnumerable,而事实上是一个List<SearchResult>,通过Reflector阅读SearchService.Search方法的代码就知道了。然后我们来看看SearchResult类型包含什么属性。它拥有3个string属性,分别是:Url、Title、Description。在使用SearchDataSource的时候,数据控件绑定这3个属性就够了。那么之后我们还需要做什么呢?接下来就是配置provider了,因为SearchService.Search方法正是通过轮询各SearchProviderBase派生类来获取搜索结果的。 源代码网推荐 源代码网推荐 这听上去很复杂的样子哦,远超过了放置一个SearchDataSource的难度。其实不是的,ASP.NET Futures (May CTP)中已经包含一个SearchProviderBase派生类了,那就是WindowsLiveSearchProvider。此provider的配置方法如下: 源代码网推荐 <microsoft.web.preview> 源代码网推荐 <search enabled="true"> 源代码网推荐 <providers> 源代码网推荐 <add name="WindowsLiveSearchProvider" 源代码网推荐 type="Microsoft.Web.Preview.Search.WindowsLiveSearchProvider, Microsoft.Web.Preview" 源代码网推荐 appID="" 源代码网推荐 siteDomainName="" /> 源代码网推荐 </providers> 源代码网推荐 </search> 源代码网推荐 </microsoft.web.preview> 源代码网推荐 源代码网推荐 其中的appID是你在Windows Live Search申请的Application ID,还没有Application ID的话可以到Windows Live Search的Developer站点申请一个。siteDomainName就是你的网站的域名,例如我的网站就是CatChen.biz。另外,你还要确认Windows Live Search已经抓取了你的网站的页面,通过大部分搜索引擎都支持的site:指令你就可以知道一个搜索引擎对你的网站的抓取情况,例如我可以通过site:CatChen.biz搜索来了解Windows Live Search对我的网站的抓取情况。完整配置并且确保搜索引擎对你的站点的抓取后,你就可以通过SearchDataSource获得期望的搜索结果了。 源代码网推荐 源代码网推荐 如果你不满足于WindowsLiveSearchProvider提供的功能,你可以实现自己的SearchProviderBase派生类。在官方文档中Enabling Search页上,最后一个例子提供了两个自定义的provider,一个是用于Yahoo的,另一个是用于Index Server的。另外不要把目光局限于某个特定的搜索引擎,如果你觉得Google、Yahoo、Windows Live都不够好,那么你可以考虑做一个自己的meta-search(源搜索)引擎。所谓的meta-search是指通过调用若干个不同的搜索引擎,根据它们的返回结果再次进行信息的分析与提取,最后生成自己的搜索结果。 源代码网推荐 源代码网推荐 在你实现了自己的SearchProviderBase派生类后,有一点需要注意的,那就是SearchService是不知道返回结果的排名的。一般我们都会认为搜索结果越靠前的,当然应该是越匹配的,这在配置一个provider时是没什么问题的。然而配置多个provider后,SearchService仅仅是将多个provider的结果拼接成一个更大的List<SearchResult>,这时候就毫无排序而言了。因此,如果你需要使用多个provider,我还是建议直接写一个SearchProviderBase派生类,使用meta-search的方式自己去合并以及重排结果。 源代码网推荐 源代码网推荐 最后,如果你有兴趣继续关注有关ASP.NET Futures新功能的介绍,可以考虑订阅我的博客: 源代码网推荐 源代码网推荐 Cat in Chinese (feed: http://feeds.feedburner.com/CatChen/Chinese) 源代码网推荐 Cat in dotNET (feed: http://feeds.feedburner.com/CatChen/dotNET) 源代码网推荐 做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。 源代码网推荐 源代码网供稿. |
