[方法] Search スキーマ内のカテゴリについてクロールされたプロパティを取得する
エンタープライズ検索 管理オブジェクト モデルでは、Schema オブジェクトを使用して、共有サービス プロバイダ (SSP) の検索メタデータについてクロールされたプロパティのカテゴリにアクセスできます。その後で、Category オブジェクトの GetAllCrawledProperties メソッドを使用すると、各カテゴリに関連付けられている、クロールされたプロパティのリストを取得できます。
以下の手順では、コンソール アプリケーションから、クロールされたプロパティの完全なリストと、それらのプロパティ セット GUID およびバリアント データ型を記述する方法を示します。
エンタープライズ検索管理オブジェクト モデルを使用するためにアプリケーションをセットアップするには
アプリケーションで、以下の 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("Retrieve Crawled Properties by Category Sample"); Console.WriteLine("Usage: GetCrawledPropertiesSample.exe CategoryName"); }
コンソール アプリケーションの Main() 関数で、args[] パラメータ内のアイテム数をチェックするコードを追加します。この数は 1 である必要があります。そうでない場合 (カテゴリを識別する値が指定されていないことを意味します) は、前の手順で定義した Usage() 関数を呼び出します。
if (args.Length != 1) { Usage(); return; }
SSP の Search スキーマのカテゴリを取得し、そのカテゴリのためにクロールされたプロパティのリストを表示するには
次のコードを使用して、カテゴリ名用のローカル文字列変数を作成し、その変数を args[] パラメータで指定される値に設定します。
string strCategoryName = args[0];
以下のコードを使用して、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)));
次のコードを使用して、Search スキーマのカテゴリのコレクションを取得します。
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; }
カテゴリが存在する場合は、以下のコードを使用して、そのカテゴリのためにクロールされたプロパティのリストを取得し、リスト内のクロールされたプロパティごとに、名前、プロパティ セット 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");
}
}
}