如何:更改托管属性的权重设置

可以使用企业级搜索管理对象模型中的 ManagedProperty() 类来更改应用于托管属性的权重。对内容编制索引时应用此设置。

从控制台应用程序中更改托管属性的权重

  1. 在应用程序中设置对以下 DLL 的引用:

    • Microsoft.SharePoint.dll

    • Microsoft.Office.Server.dll

    • Microsoft.Office.Server.Search.dll

  2. 在控制台应用程序的类文件中,将以下 using 语句添加到具有其他命名空间指令的代码顶部附近。

    using Microsoft.SharePoint;
    using Microsoft.Office.Server.Search.Administration;
    
  3. 创建用于向控制台窗口写入使用信息的函数。

    static void Usage()
    {
      Console.WriteLine("Change Property Weight");
      Console.WriteLine("Usage: PropertyWeightSample.exe ManagedPropertyName <WeightValue>");
      Console.WriteLine("<WeightValue>: Must be formatted as a float.");
    }
    
  4. 在控制台应用程序的 Main() 函数中,添加检查 args[] 参数中项数的代码;这个数必须等于 2。否则,请调用步骤 3 中定义的 Usage() 函数。

    if (args.Length != 2)
    {
    Usage();
    return;
    }
    
  5. 检索 args[] 参数中指定的值,这些值将用于指定要更改其权重设置的托管属性的名称,并检索新的权重设置值。

    string strPropertyName = args[0].ToLower();
    float newWeight = Convert.ToSingle(args[1]);
    
  6. 若要为共享服务提供程序 (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)));
    
  7. 使用以下代码检索托管属性的集合。

    ManagedPropertyCollection properties = sspSchema.AllManagedProperties;
    
  8. 通过检查为 Contains 方法返回的值,确定托管属性的集合是否包括要更改其权重的托管属性。如果返回 false,则不存在该属性,因此会向控制台输出一条消息以说明这一点。

    if (!properties.Contains(strPropertyName))
    {
       Console.WriteLine strPropertyName + " property does not exist.");
       return;
    }
    
  9. 如果 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

概念

企业级搜索相关性体系结构概述

企业级搜索管理对象模型入门

改进相关性

其他资源

以编程方式管理企业级搜索