[方法] クロール プロパティを管理プロパティにマップする
エンタープライズ検索 管理オブジェクト モデルの Schema オブジェクトは、共有サービス プロバイダ (SSP) の検索サービスに対して構成されている管理プロパティへのアクセスを提供します。Schema オブジェクトの詳細については、「メタデータを管理する」を参照してください。
次に示すのは、クロール プロパティを管理プロパティにマップする手順です。.
エンタープライズ検索管理オブジェクト モデルを使用するようにアプリケーションをセットアップするには
アプリケーションで、以下の DLL への参照を設定します。
Microsoft.SharePoint.dll
Microsoft.Office.Server.dll
Microsoft.Office.Server.Search.dll
コンソール アプリケーションのクラス ファイルで、他の名前空間ディレクティブを含むコードの先頭付近に次の using ステートメントを追加します。
using Microsoft.SharePoint; using Microsoft.Office.Server.Search.Administration;
プロパティ マッピングに必要な値が args[] パラメータで渡されたかどうかを検査し、渡されていない場合は使用方法の情報を表示するには
利用状況情報をコンソール ウィンドウに書き出す関数を作成します。
static void Usage() { Console.WriteLine("Map Crawled Property to Managed Property Sample"); Console.WriteLine("Usage: PropertyMappingSample.exe <cPropGUID> <cPropName> <cPropVType> <mPropPID>"); Console.WriteLine("<cPropGUID> - The GUID identifying the crawled property."); Console.WriteLine("<cPropName> - The crawled property name."); Console.WriteLine("<cPropVType> - The variant type of the crawled proeprty."); Console.WriteLine("<mPropName> - The name of the managed property."); }
コンソール アプリケーションの Main() 関数で、args[] パラメータに含まれる項目の数が 4 と等しいかどうかを検査するコードを追加します。等しくない場合 (プロパティのマッピングを作成するために必要なすべての値が args[] パラメータで渡されなかったことを意味します) は、前の手順で定義した Usage() 関数を呼び出します。
if (args.Length != 4) { Usage(); return; }
プロパティのマッピングを作成するには
次のコードを使用して、args[] パラメータで渡されたプロパティ マッピングの値を保持するローカル変数を作成します。
Guid cPropGUID = new Guid(args[0]); string cPropName = args[1]; int vType = Convert.ToInt32(args[2]); string mPropName = args[3];
次のコードを使用して、SSP の検索コンテキストの Schema オブジェクトを取得します。検索コンテキストを取得する方法の詳細については、「[方法] 検索サービス プロバイダに検索コンテキストを返す」を参照してください。
/* Replace <SiteName> with the name of a site using the SSP */ SearchContext context; string strURL = "http://<SiteName>"; using(SPSite site = new SPSite(strURL)) { context = SearchContext.GetContext(site); } Schema sspSchema = new Schema(context);
次のコードを使用して、管理プロパティのコレクションを取得します。
ManagedPropertyCollection properties = sspSchema.AllManagedProperties;
args[3] パラメータで指定されている名前の管理プロパティを取得します。
ManagedProperty mProp = properties[mPropName];
前の手順で取得した値を使用して、Mapping クラスのインスタンスを作成します。
Mapping newMapping = new Mapping(cPropGUID, cPropName, vType, mProp.PID);
その管理プロパティに対するマッピングのコレクションを取得し、手順 5 で作成したマッピングがコレクション内のいずれかの既存マッピングと一致するかどうかを調べて、一致する場合は、次のコードを使用してコンソールに情報を表示します。
MappingCollection mappings = mProp.GetMappings(); if(mappings.Contains(newMapping)) { Console.WriteLine("Mapping failed: requested mapping already exists."); return; }
新しいマッピングが、コレクション内の既存のマッピングと一致しない場合は、次のコードを使用して、管理プロパティのマッピング コレクションに新しいマッピングを追加します。
mappings.Add(newMapping); mProp.SetMappings(mappings); Console.WriteLine(cPropName + "crawled property mapped to " + mProp.Name + " managed property."); return;
例
以下に、コンソール アプリケーション クラスのサンプルの完全なコードを示します。
前提条件
- 共有サービス プロバイダが既に作成されていることを確認します。
プロジェクト参照
このサンプルを実行する前に、コンソール アプリケーション コード プロジェクトに以下のプロジェクト参照を追加します。
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 PropertyMappingSample
{
class Program
{
static void Main(string[] args)
{
try
{
if (args.Length != 4)
{
Usage();
return;
}
Guid cPropGUID = new Guid(args[0]);
string cPropName = args[1];
int vType = Convert.ToInt32(args[2]);
string mPropName = args[3];
/*
Replace <SiteName> with the name of
a site that uses the SSP
*/
string strURL = "http://<SiteName>";
SearchContext context;
using(SPSite site = new SPSite(strURL))
{
context = SearchContext.GetContext(site);
}
Schema sspSchema = new Schema(context);
ManagedPropertyCollection properties = sspSchema.AllManagedProperties;
ManagedProperty mProp = properties[mPropName];
Mapping newMapping = new Mapping(cPropGUID, cPropName, vType, mProp.PID);
MappingCollection mappings = mProp.GetMappings();
if(mappings.Contains(newMapping))
{
Console.WriteLine("Mapping failed: requested mapping already exists.");
return;
}
mappings.Add(newMapping);
mProp.SetMappings(mappings);
Console.WriteLine(cPropName + "crawled property mapped to " + mProp.Name + " managed property.");
}
catch (Exception ex1)
{
Console.WriteLine(ex1.ToString());
Usage();
}
}
static void Usage()
{
Console.WriteLine("Map Crawled Property to Managed Property Sample");
Console.WriteLine("Usage: PropertyMappingSample.exe <cPropGUID> <cPropName> <cPropVType> <mPropName>");
Console.WriteLine("<cPropGUID> - The GUID identifying the crawled property.");
Console.WriteLine("<cPropName> - The crawled property name.");
Console.WriteLine("<cPropVType> - The variant type of the crawled proeprty.");
Console.WriteLine("<mPropName> - The name of the managed property.");
}
}
}