次の方法で共有


[方法] Search スキーマ内のカテゴリについてクロールされたプロパティを取得する

エンタープライズ検索 管理オブジェクト モデルでは、Schema オブジェクトを使用して、共有サービス プロバイダ (SSP) の検索メタデータについてクロールされたプロパティのカテゴリにアクセスできます。その後で、Category オブジェクトの GetAllCrawledProperties メソッドを使用すると、各カテゴリに関連付けられている、クロールされたプロパティのリストを取得できます。

以下の手順では、コンソール アプリケーションから、クロールされたプロパティの完全なリストと、それらのプロパティ セット GUID およびバリアント データ型を記述する方法を示します。

エンタープライズ検索管理オブジェクト モデルを使用するためにアプリケーションをセットアップするには

  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;
    

カテゴリ名のための値がユーザーによって指定されたことを確認し、指定されていない場合にはユーザーに使用法のヘルプを表示するには

  1. 利用状況情報をコンソール ウィンドウに書き出す関数を作成します。

    static void Usage()
    {
       Console.WriteLine("Retrieve Crawled Properties by Category Sample");
       Console.WriteLine("Usage: GetCrawledPropertiesSample.exe CategoryName");
    }
    
  2. コンソール アプリケーションの Main() 関数で、args[] パラメータ内のアイテム数をチェックするコードを追加します。この数は 1 である必要があります。そうでない場合 (カテゴリを識別する値が指定されていないことを意味します) は、前の手順で定義した Usage() 関数を呼び出します。

    if (args.Length != 1)
    {
    Usage();
    return;
    }
    

SSP の Search スキーマのカテゴリを取得し、そのカテゴリのためにクロールされたプロパティのリストを表示するには

  1. 次のコードを使用して、カテゴリ名用のローカル文字列変数を作成し、その変数を args[] パラメータで指定される値に設定します。

    string strCategoryName = args[0];
    
  2. 以下のコードを使用して、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)));
    
  3. 次のコードを使用して、Search スキーマのカテゴリのコレクションを取得します。

    CategoryCollection categories = sspSchema.AllCategories;
    
  4. カテゴリのコレクションに、指定したカテゴリが含まれているかどうかを特定します。含まれていない場合、以下のコードを使用して、コレクションに含まれるカテゴリのリストを表示します。

    if (categories.Contains(strCategoryName) != true)
    {
        Console.WriteLine(strCategoryName + " does not exist in Schema.");
        Console.WriteLine("Valid Schema Categories are:");
        foreach (Category category in categories)
        {
            Console.WriteLine(category.Name);
        }
        return;
    }
    
  5. カテゴリが存在する場合は、以下のコードを使用して、そのカテゴリのためにクロールされたプロパティのリストを取得し、リスト内のクロールされたプロパティごとに、名前、プロパティ セット GUID、およびバリアント型をコンソールに書き込みます。

    foreach (Category category in categories)
    {
        if (category.Name == strCategoryName)
        {
            foreach (CrawledProperty property in category.GetAllCrawledProperties())
            {
                Console.WriteLine("");
                Console.Write("NAME: " + property.Name);
                Console.Write("   PROPSET: " + property.Propset.ToString());
                Console.Write("   VARIANTTYPE: " + property.VariantType.ToString());
            }
        }
    }
    

以下に、コンソール アプリケーション クラスのサンプルの完全なコードを示します。

前提条件

  • 共有サービス プロバイダが既に作成されていることを確認します。

プロジェクト参照

このサンプルを実行する前に、コンソール アプリケーション コード プロジェクトに以下のプロジェクト参照を追加します。

  • 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 GetCrawledPropertiesSample
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                if (args.Length != 1)
                {
                    Usage();
                    return;
                }

                string strCategoryName = args[0];
                /*
                Replace <SiteName> with the name of a site using the SSP
                */
                string strURL = "http://<SiteName>";
                Schema sspSchema = new Schema(SearchContext.GetContext(new SPSite(strURL)));
                CategoryCollection categories = sspSchema.AllCategories;

                if (categories.Contains(strCategoryName) != true)
                {
                    Console.WriteLine(strCategoryName + " does not exist in Schema.");
                    Console.WriteLine("Valid Schema Categories are:");
                    foreach (Category category in categories)
                    {
                        Console.WriteLine(category.Name);
                    }
                    return;
                }

                foreach (Category category in categories)
                {
                    if (category.Name == strCategoryName)
                    {
                        foreach (CrawledProperty property in category.GetAllCrawledProperties())
                        {
                            Console.WriteLine("");
                            Console.Write("NAME: " + property.Name);
                            Console.Write("   PROPSET: " + property.Propset.ToString());
                            Console.Write("   VARIANTTYPE: " + property.VariantType.ToString());
                        }
                    }
                }
            }
            catch (Exception ex1)
            {
                Console.WriteLine(ex1.ToString());
                Usage();
            }
        }
 
        static void Usage()
        {
            Console.WriteLine("Retrieve Crawled Properties by Category Sample");
            Console.WriteLine("Usage: GetCrawledPropertiesSample.exe CategoryName");
        }
    }
}