如何:创建托管属性

利用企业级搜索管理对象模型中的 [Schema] 对象,可以访问为共享服务提供程序 (SSP) 的搜索服务配置的托管属性。有关 Schema 对象的详细信息,请参阅管理元数据

下面的过程演示如何从控制台应用程序创建托管属性。

从控制台应用程序创建托管属性

  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("Create Managed Property");
       Console.WriteLine("Usage: CreateManagedPropertiesSample.exe PropertyName <DataType>");
       Console.WriteLine("<DataType> - The data type for the new property.  Must be one of:");
       Console.WriteLine("binary");
       Console.WriteLine("datetime");
       Console.WriteLine("decimal");
       Console.WriteLine("integer");
       Console.WriteLine("text");
       Console.WriteLine("yesno");
    }
    
  4. 在控制台应用程序的 Main() 函数中,添加代码以检查 args[] 参数中的项数;它必须等于 2。否则,调用步骤 3 中定义的 Usage() 函数。

    if (args.Length != 2)
    {
    Usage();
    return;
    }
    
  5. 检索在 args[] 参数中指定的值,这些值将用于指定托管属性的名称和数据类型。

    string strName = args[0];
    string strDataType = 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. 确定托管属性的集合是否已包含与新属性同名的托管属性。

    if (properties.Contains(strName))
    {
       Console.WriteLine("Managed Property with that name already exists.");
       return;
    }
    
  9. 如果 Contains 方法返回 false,则使用 strDataType 变量中的值来确定要使用的数据类型,然后调用 Create 方法创建新的托管属性。

    switch (strDataType)
    {
        case ("binary"):
    properties.Create(strName, ManagedDataType.Binary);
    Console.WriteLine(strName + " created.");
    break;
    
        case ("datetime"):
    properties.Create(strName, ManagedDataType.DateTime);
                 Console.WriteLine(strName + " created.");
                 break;
    
        case ("decimal"):
        properties.Create(strName, ManagedDataType.Decimal);
                 Console.WriteLine(strName + " created.");
                 break;
    
        case ("integer"):
        properties.Create(strName, ManagedDataType.Integer);
                 Console.WriteLine(strName + " created.");
                 break;
    
        case ("text"):
        properties.Create(strName, ManagedDataType.Text);
                 Console.WriteLine(strName + " created.");
                 break;
    
        case ("yesno"):
        properties.Create(strName, ManagedDataType.YesNo);
                 Console.WriteLine(strName + " created.");
                 break;
    
        default:
        Console.WriteLine("Datatype not recognized.");
                 Usage();
                 break;
    }
    

示例

以下是本主题中描述的示例控制台应用程序的完整代码。

先决条件

  • 确保已创建一个共享服务提供程序。

项目引用

运行此示例之前,在控制台应用程序的代码项目中添加下面的项目引用:

  • Microsoft.SharePoint

  • Microsoft.Office.Server

  • Microsoft.Office.Server.Search

using System;
using System.Collections;
using System.Text;
using Microsoft.Office.Server.Search.Administration;
using Microsoft.SharePoint;

namespace CreateManagedPropertiesSample
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                if (args.Length != 2)
                {
                    Usage();
                    return;
                }
                string strName = args[0];
                string strDataType = args[1];
/*
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;
                if (properties.Contains(strName))
                {
                    Console.WriteLine("Managed Property with that name already exists.");
                    return;
                }
                switch (strDataType)
                {
                    case ("binary"):
                        properties.Create(strName, ManagedDataType.Binary);
                        Console.WriteLine(strName + " created.");
                        break;

                    case ("datetime"):
                        properties.Create(strName, ManagedDataType.DateTime);
                        Console.WriteLine(strName + " created.");
                        break;

                    case ("decimal"):
                        properties.Create(strName, ManagedDataType.Decimal);
                        Console.WriteLine(strName + " created.");
                        break;

                    case ("integer"):
                        properties.Create(strName, ManagedDataType.Integer);
                        Console.WriteLine(strName + " created.");
                        break;

                    case ("text"):
                        properties.Create(strName, ManagedDataType.Text);
                        Console.WriteLine(strName + " created.");
                        break;

                    case ("yesno"):
                        properties.Create(strName, ManagedDataType.YesNo);
                        Console.WriteLine(strName + " created.");
                        break;

                    default:
                        Console.WriteLine("Datatype not recognized.");
                        Usage();
                        break;
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }
        static void Usage()
        {
            Console.WriteLine("Create Managed Property");
            Console.WriteLine("Usage: CreateManagedPropertiesSample.exe PropertyName <DataType>");
            Console.WriteLine("<DataType> - The data type for the new property.  Must be one of:");
            Console.WriteLine("binary");
            Console.WriteLine("datetime");
            Console.WriteLine("decimal");
            Console.WriteLine("integer");
            Console.WriteLine("text");
            Console.WriteLine("yesno");
        }
    }
}

See Also

任务

如何:返回搜索服务提供程序的搜索上下文

如何:检索共享服务提供程序的托管属性

如何:删除托管属性

概念

管理元数据