如何:更改托管属性的权重设置
可以使用企业级搜索管理对象模型中的 ManagedProperty() 类来更改应用于托管属性的权重。对内容编制索引时应用此设置。
从控制台应用程序中更改托管属性的权重
在应用程序中设置对以下 DLL 的引用:
Microsoft.SharePoint.dll
Microsoft.Office.Server.dll
Microsoft.Office.Server.Search.dll
在控制台应用程序的类文件中,将以下 using 语句添加到具有其他命名空间指令的代码顶部附近。
using Microsoft.SharePoint; using Microsoft.Office.Server.Search.Administration;
创建用于向控制台窗口写入使用信息的函数。
static void Usage() { Console.WriteLine("Change Property Weight"); Console.WriteLine("Usage: PropertyWeightSample.exe ManagedPropertyName <WeightValue>"); Console.WriteLine("<WeightValue>: Must be formatted as a float."); }
在控制台应用程序的 Main() 函数中,添加检查 args[] 参数中项数的代码;这个数必须等于 2。否则,请调用步骤 3 中定义的 Usage() 函数。
if (args.Length != 2) { Usage(); return; }
检索 args[] 参数中指定的值,这些值将用于指定要更改其权重设置的托管属性的名称,并检索新的权重设置值。
string strPropertyName = args[0].ToLower(); float newWeight = Convert.ToSingle(args[1]);
若要为共享服务提供程序 (SSP) 的搜索上下文检索 Schema 对象,请添加以下代码。有关检索搜索上下文的方法的详细信息,请参阅如何:返回搜索服务提供程序的搜索上下文。
/* Replace <SiteName> with the name of a site using the SSP */ string strURL = "http://<SiteName>"; Schema sspSchema = new Schema(SearchContext.GetContext(new SPSite(strURL)));
使用以下代码检索托管属性的集合。
ManagedPropertyCollection properties = sspSchema.AllManagedProperties;
通过检查为 Contains 方法返回的值,确定托管属性的集合是否包括要更改其权重的托管属性。如果返回 false,则不存在该属性,因此会向控制台输出一条消息以说明这一点。
if (!properties.Contains(strPropertyName)) { Console.WriteLine strPropertyName + " property does not exist."); return; }
如果 Contains 方法返回 true,则在托管属性中循环,并对每个属性查看 Name 属性是否与 strPropertyName 的值相符;如果相符,将 Weight 属性更改为指定值。
foreach (ManagedProperty property in properties) { if (property.Name.ToLower() == strPropertyName) { property.Weight = newWeight; Console.WriteLine("Weight value changed for " + strPropertyName + " property."); Console.WriteLine("NAME: " + property.Name + " WEIGHT: " + property.Weight.ToString()); } }
示例
下面是示例控制台应用程序的完整代码。
先决条件
- 确保已创建了共享服务提供程序。
项目引用
运行此示例之前,向您的控制台应用程序代码项目中添加以下项目引用:
Microsoft.SharePoint
Microsoft.Office.Server
Microsoft.Office.Server.Search
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.SharePoint;
using Microsoft.Office.Server.Search.Administration;
namespace PropertyWeightSample
{
class Program
{
static void Main(string[] args)
{
try
{
if (args.Length != 2)
{
Usage();
return;
}
/*
Replace <SiteName> with the name of a site using the SSP
*/
string strURL = "http://<SiteName>";
Schema sspSchema = new Schema(SearchContext.GetContext(new SPSite(strURL)));
ManagedPropertyCollection properties = sspSchema.AllManagedProperties;
string strPropertyName = args[0].ToLower();
float newWeight = Convert.ToSingle(args[1]);
if (!properties.Contains(strPropertyName))
{
Console.WriteLine(strPropertyName + " property does not exist.");
return;
}
foreach (ManagedProperty property in properties)
{
if (property.Name.ToLower() == strPropertyName)
{
property.Weight = newWeight;
Console.WriteLine("Weight value changed for " + strPropertyName + " property.");
Console.WriteLine("NAME: " + property.Name + " WEIGHT: " + property.Weight.ToString());
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
Usage();
}
}
private static void Usage()
{
Console.WriteLine("Change Property Weight");
Console.WriteLine("Usage: PropertyWeightSample.exe ManagedPropertyName <WeightValue>");
Console.WriteLine("<WeightValue>: Must be formatted as a float.");
}
}
}
See Also
参考
Microsoft.Office.Server.Search.Administration.Schema