在SharePoint Server 2007中搜索范围用于缩小用户执行查询后返回的搜索结果集。搜索范围可以定义成共享的,也可以是局部的。在搜索范围定义中,我们可以使用不同的规则,可以定义一个基于某种内容源的简单范围,也可以定义一个基于自定义元数据条件的复杂范围。我们可以在搜索下拉列表、搜索结果页面、高级搜索以及其他位置中看到搜索范围。我们可以简单的理解为,在搜索范围选取下拉列表中所看到的范围就是搜索范围。
管理员可以在浏览器重创建搜索范围。另外,MOSS还提供了一整套新的搜索管理对象模型。下面的代码中,我们将创建一个共享的搜索范围,并发布该范围,使其成为一个协作门户的搜索体验的一部分。
我们必须使下面的样例代码运行在装有MOSS的服务器上。该代码需要引用到Microsoft.SharePoint.dll,Microsoft.Office.Server.dll,Microsoft.Office.Server.Search.dll和System.Web.dll。添加下列的namespace:
using Microsoft.Office.Server;
using Microsoft.Office.Server.Administration;
using Microsoft.Office.Server.Search;
using Microsoft.Office.Server.Search.Administration;
连接到共享服务SSP(Shared Services Provider)和搜索上下文
明白如何添加到SSP和搜索服务上下文的引用是很重要的。这是我们进行搜索范围编程的基础。下面的代码展示了该过程。本例假设共享服务的名称为“SharedServices1”。
private ServerContext serverctx = null;
private SearchContext searchctx = null;
private void Form1_Load(object sender, EventArgs e)
{
serverctx = ServerContext.GetContext("SharedServices1");
searchctx = SearchContext.GetContext(serverctx);
}
列出已有的范围
通过传搜索上下文(SearchContext)给Scopes类的构造器来初始化一个Scopes对象。然后,可以通过循环遍历所有GetSharedScopes得到的范围。
Scopes scopes = new Scopes(searchctx);
foreach (Scope scope in scopes.GetSharedScopes())
{
TreeNode node = treeViewScopes.Nodes.Add(scope.Name);
}
获取相关的规则信息
规则决定了搜索范围。我们可以获取所有规则的细节。下面的代码展示了对象模型中提供的三种不同类型的规则。
foreach (TreeNode node in treeViewScopes.Nodes)
{
foreach (ScopeRule rule in scope.Rules)
{
if (rule is PropertyQueryScopeRule)
{
PropertyQueryScopeRule prule = (PropertyQueryScopeRule)rule;
TreeNode childnode = node.Nodes.Add("Property Query Rule: ");
childnode.Text += prule.Property.Name + " = " + prule.Value;
}
if (rule is AllContentScopeRule)
{
AllContentScopeRule arule = (AllContentScopeRule)rule;
node.Nodes.Add("All Content Rule");
}
if (rule is UrlScopeRule)
{
UrlScopeRule urule = (UrlScopeRule)rule;
TreeNode childnode = node.Nodes.Add("URL Rule: ");
childnode.Text += urule.MatchingString;
}
}
}