我们必须使下面的样例代码运行在装有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; } }}创建一个共享的搜索范围
我们可以通过添加一个Scope实例到ScopeCollection中来创建一个共享的搜索范围。可以通过Scopes实例的AllScopes属性得到一个ScopeCollection。当我们创建好一个共享的搜索范围后,就可以使用CreateUrlRule方法来给该范围关联一个或多个规则。
Scope newScope = scopes.AllScopes.Create (textBoxName.Text, string .Empty, null , true , " results.aspx " , ScopeCompilationType.AlwaysCompile);newScope.Rules.CreateUrlRule (ScopeRuleFilterBehavior.Include, UrlScopeRuleType.HostName, textBoxURLRule.Text);编译共享搜索范围
我们还需要在使用该范围前编译它。这包括了在物理的索引文件中标记出符合该范围的规则的条目的过程。编译是在Scopes实例的级别进行的。
newScope.StartCompilation();列出显示组搜索范围会出现在SharePoint站点的范围选取器中。一个范围选取器会把某个范围列在某个显示组中。下面的代码会获取某个特定站点集下所有的显示组。
foreach (ScopeDisplayGroup group in scopes.AllDisplayGroups){ if (group.OwningSite.Url == textBoxURL.Text) comboBoxDisplayGroups.Items.Add(group.Name); }}关联共享的搜索范围到某个显示组我们必须把范围关联到某个显示组上,以便范围选取器显示它。
ScopeDisplayGroup group = scopes.GetDisplayGroup ( new Uri(textBoxURL.Text), comboBoxDisplayGroups.SelectedItem.ToString());group.Add(newScope);group.Update();在MOSS环境中,我们可以定义两种级别的范围:
我们可以在SSP级别上创建共享的搜索范围。这样就可以在服务器场级别中,所有绑定该SSP的Web应用程序上,创建的网站集里使用该范围。
我们也可以在个别的网站集上创建用于局部的搜索范围。这样的范围无法在其他的网站集上重用。
一个搜索范围是由一个或多个规则定义的。SharePoint Server 2007对象模型中引入了新的规则,用于支持不同类型的搜索范围。
AllContentScopeRule 类 用于描述一个包含了索引中的所有条目的范围。
通过 PropertyQueryScopeRule 类我们可以创建出符合某个属性查询(如,作者=李向军)的范围
UrlScopeRule 类描述的范围中的条目都是在某个显示的URL网址下。
最终用户可以在范围选取下拉列表中选择某个特定的搜索范围或者一个上下文相关的搜索范围,如“搜索此网站”。查看视频
转载于:https://www.cnblogs.com/Sunmoonfire/archive/2007/06/12/779834.html
相关资源:数据结构—成绩单生成器