外部アイテム処理コンポーネントの統合
最終更新日: 2010年8月30日
適用対象: SharePoint Server 2010
この記事の内容
パイプライン拡張の概要
コマンド環境
パイプライン拡張と IFilter
クロールされたプロパティの処理
pipelineextensibility.xml のカスタマイズ
pipelineextensibility.xml のファイル形式
入力ファイルと出力ファイルの形式
カスタム コマンドの作成
適用先: Microsoft FAST Search Server 2010 for SharePoint
アイテム処理パイプラインでは、コンテンツ ソースのアイテムをインデックス作成と検索用に準備します。この準備には、テキスト抽出、言語検出、およびトークン化があります。
一部のアプリケーションでは、アイテム処理の拡張を行う必要があります。コンテンツから追加の検索可能なメタデータを生成したり、アイテムの情報を統計または監視の目的でサード パーティ アプリケーションに転送できます。
ここでは、次の順序で FAST Search Server 2010 for SharePoint 用の外部アイテム処理コンポーネントを作成する方法について説明します。
パイプライン拡張の概要
FAST Search Server 2010 for SharePoint のアイテム処理パイプラインは、テキスト抽出、言語検出、トークン化など、さまざまなタスクを実行して、コンテンツ ソースのアイテムをインデックス作成と検索用に準備します。
パイプライン拡張インターフェイスによって、パイプラインを経由して供給される各アイテムに対してカスタム処理コマンドを実行できます。コマンドは、クロールされたプロパティのセットを入力として受け取り、別のクロールされたプロパティのセットを出力します。アイテム処理パイプラインとカスタム コマンドの間の通信は、一時 XML ファイルを使用して行われます。パイプライン拡張処理は、クロールされたプロパティが管理プロパティにマッピングされる前に実行されます。
入力用のクロールされたプロパティとして、コンテンツ ソースから取得したメタデータを使用できます。または、取得した XML アイテムに対してカスタム XML アイテム処理 (「カスタム XML アイテム処理」を参照してください) を使用して、XML データからクロールされたプロパティを作成できます。
実行するコマンドは、pipelineextensibility.xml で指定します。この構成ファイルの形式は、パイプライン拡張性構成スキーマで指定します。コマンドごとに、コマンドが入力として受け取るクロールされたプロパティ、およびコマンドが出力するクロールされたプロパティの一覧を記述します。
![]() |
---|
このファイルへの変更は、FAST Search Server 2010 for SharePoint の更新プログラムまたは Service Pack をインストールすると、上書きされ、失われます。 この構成ファイルは、標準の FAST Search Server 2010 for SharePoint バックアップ手順ではバックアップされません。変更内容が失われないようにするためには、変更後にこのファイルを必ずバックアップします。 FAST Search Server 2010 for SharePoint の更新プログラムまたは Service Pack をインストールした場合は、必ず構成ファイルを再び変更してください。 |
コマンド環境
コマンドを実行する前に、入力用のクロールされたプロパティを一時 XML ファイルに収集します。その後、コマンドは、そのファイルを読み取り、結果のクロールされたプロパティを別の一時 XML ファイルに出力します。入力ファイルと出力ファイルへのパスは、実行するコマンドを指定するときに特殊な文字列シーケンスとして使用できます。入力ファイルと出力ファイルのファイル形式は、同一で、パイプライン拡張インターフェイス スキーマで指定します。
コマンドは、限られた処理時間、メモリ、およびプロセス数を使用するサンドボックス環境で実行されます。入力ファイルと出力ファイルとは別に、コマンドには、公的にアクセス可能なファイルに対して読み取り/書き込み権限しかありません。
ネットワークへのフル アクセスが提供されます。ネットワーク アクセスが必要ない場合は、ファイアウォール ルールを作成して、アプリケーションが危険にさらされる場合に備えてアプリケーションをブロックします。
サンドボックス環境でのコマンドの実行に問題がある場合は、コードを変更して、ソケットを使用する別のプロセスまたはサービスに入力を転送するようにして、そのプロセスまたはサービスにメインの作業を実行してもらうことを検討してください。
パイプライン拡張と IFilter
新しいドキュメント形式のテキスト抽出を実装するには、IFilter を実装し、その IFilter を FAST Search Server 2010 for SharePoint に登録します。また、パイプライン拡張機能と共にテキスト抽出サポートも実装できます。詳細については、「サード パーティ IFilter を使用するように FAST Search Server for SharePoint を設定する」を参照してください。
クロールされたプロパティの処理
クロールされたプロパティは、データを検索に使用できるようにするためにコンテンツ ソースから抽出されたメタデータです。クロールされたプロパティは、通常、Content SSA またはその他の FAST Search Server 2010 for SharePoint コネクタによって報告されますが、アイテムの処理中に IFilter またはカスタム処理ステージによって作成することもできます。
クロールされたプロパティは、Name、Propset、および VariantType を使用して一意に定義します。Windows PowerShell コマンドレット New-FASTSearchMetadataCrawledProperty を使用してカスタムのクロールされたプロパティを作成できます。既存の Propset を使用するか、カスタムのクロールされたプロパティ用の Propset を作成するかを選択できます。
各クロールされたプロパティは、管理プロパティにマッピングできます。または、クロールされたプロパティのカテゴリを定義して、カテゴリ全体を既定のフルテキスト インデックスにマッピングできます。詳細については、「Manage Crawled Properties by Using Windows PowerShell (FAST Search Server 2010 for SharePoint)」および「インデックス スキーマ参照情報」を参照してください。
管理プロパティにマップできるクロールされたプロパティの型のみがサポートされています。
特別なプロパティ セットには、アイテム処理パイプラインの内部で作成されるクロールされたプロパティを格納します。これらの読み取り専用プロパティのサブセットは、パイプライン拡張コマンドに渡される可能性があります。そのプロパティには、url プロパティ、data プロパティ、および body プロパティがあります。data プロパティには、base64 でエンコードされたソース ドキュメントのバイナリ コンテンツを格納します。詳細については、「CrawledProperty 要素 [パイプライン拡張構成スキーマ]」を参照してください。
pipelineextensibility.xml のカスタマイズ
このファイルは、テキスト エディターまたは XML エディターを使用してカスタマイズします。
注意
構成ファイルを変更するには、FAST Search Server 2010 for SharePoint がインストールされているコンピューターで FASTSearchAdministrators ローカル グループのメンバーである必要があります。
pipelineextensibility.xml を編集するには
FAST Search Server 2010 for SharePoint ファーム展開の各サーバーで、%FASTSEARCH%\etc\pipelineextensibility.xml をユーザーの変更内容で更新します。
FAST Search Server 2010 for SharePoint 管理ノードで、コマンド psctrl reset を実行して、システムで現在実行されているアイテム プロセッサをリセットします。
ファイルのバックアップを保存します。このファイルは、FAST Search Server 2010 for SharePoint の構成バックアップ/復元処理に含まれていません。
ソフトウェア更新プログラムを適用した後に、バックアップからこのファイルを更新する必要があります。詳細については、「パイプライン拡張の概要」の「重要」を参照してください。
pipelineextensibility.xml のファイル形式
次に、pipelineextensibility.xml ファイルの基本構造を示します。
<PipelineExtensibility>
<Run command='CommandName'>
<Input>
<CrawledProperty propertySet='GUID' propertyName='PropertyName' propertyId='PropertyId' varType='PropertyType'>
</Input>
<Output>
<CrawledProperty propertySet='GUID' propertyName='PropertyName' propertyId='PropertyId' varType='PropertyType' defaultValue='DefaultValue'>
</Output>
</Run>
</PipelineExtensibility>
XML 構文の詳細については、「パイプライン拡張性構成スキーマ」を参照してください。
複数の Run 要素を指定できます。この要素は、構成ファイルに指定した順序で処理されます。Input 要素と Output 要素には、複数の CrawledProperty 要素を指定できます。
次の例では、(property ID 4 で識別される) Author プロパティを概要情報プロパティ セットから読み取り、MyProperty という名前の別のプロパティに出力するコマンドの構成を示します。入力ファイルと出力ファイルへのパスは、次のように、特殊な文字列シーケンス "%(input)s" と "%(output)s" として使用できます。
<PipelineExtensibility>
<Run command="sample.exe %(input)s %(output)s">
<Input>
<CrawledProperty propertySet="f29f85e0-4ff9-1068-ab91-08002b27b3d9" varType="31" propertyId="4"/>
</Input>
<Output>
<CrawledProperty propertySet="d5cdd505-2e9c-101b-9397-08002b2cf9ae" varType="31" propertyName="MyProperty"/>
</Output>
</Run>
</PipelineExtensibility>
Windows PowerShell コマンドレット Get-FASTSearchMetadataCrawledProperty を使用して、クロールされたプロパティの propertySet と varType を取得できます。次の例では、fileextension という名前のクロールされたプロパティについて取得する方法を示します。
PS C:\FASTSearch\etc> Get-FASTSearchMetadataCrawledProperty -name fileextension
CategoryName : Basic
IsMappedToContents : False
IsNameEnum : False
IsMultiValued : False
Name : FileExtension
Propset : 0b63e343-9ccc-11d0-bcdb-00805fccce04
VariantType : 31
入力ファイルと出力ファイルの形式
クロールされたプロパティを格納する中間入力ファイルと中間出力ファイルは、同じ XML 形式を使用します。
次に、中間ファイルの基本構造を示します。
<Document>
<CrawledProperty propertySet='GUID' propertyName='PropertyName' propertyId='PropertyId' varType='PropertyType'>propertyValue</CrawledProperty>
</Document>
XML 構文の詳細については、「パイプライン拡張インターフェイス スキーマ」を参照してください。
次の例では、「pipelineextensibility.xml のファイル形式」の例で使用されている入力ファイルを指定しています。この例では、作成者は John Doe であると想定しています。
<Document>
<CrawledProperty propertySet="f29f85e0-4ff9-1068-ab91-08002b27b3d9"
varType="31" propertyId="4">John Doe</CrawledProperty>
</Document>
入力ファイルは、FAST Search Server 2010 for SharePoint アイテム処理パイプラインによって必ず UTF-8 でエンコードされます。コマンドによって生成される出力ファイルは、UTF-8 と UTF-16 のどちらかでエンコードして、すべての文字が正しく解釈されるようにする必要があります。
カスタム コマンドの作成
command 属性の特殊な文字列シーケンス "%(input)s" は、入力ファイルの実際のパスによって置き換えられます。Input 要素に CrawledProperty 要素がある場合は、このシーケンスが必要です。
command の特殊な文字列シーケンス "%(output)s" は、出力ファイルの実際のパスによって置き換えられます。Output 要素に CrawledProperty 要素がある場合は、このシーケンスが必要で、有効な出力ファイルが生成される必要があります。出力ファイルは、次のように少なくとも最上位の Document 要素を含んでいる必要があります。
<Document></Document>
コマンドは、一覧に指定された CrawledProperty 要素のサブセットを出力することが許可されています。
FAST Search Server 2010 for SharePoint アイテム処理パイプラインでは、コマンドの終了コードを使用して、そのコマンドが正常に実行されたかどうかを確認します。ゼロの終了コードは、コマンドが正常に実行され、開始から終了まで実行することができたことを示します。ゼロ以外の終了コードは、コマンドによるタスク実行を妨げる異常な状態 (たとえば、構成ファイルのエラー、DLL が見つからない、未処理の例外) が発生した場合にだけ使用する必要があります。このような場合、コマンドは、標準の出力または標準のエラーに、問題を説明する短いメッセージを記録する必要があります。このメッセージは、クロール ログに転送されます。
構成をインストールに適用する前に、サンプル入力ファイルを作成し、入力ファイルと一緒にコマンドを手動で呼び出して、各ノードでそのコマンドが予想どおりに動作することを確認します。
次の例は、pipelineextensibility.xml のファイル形式セクションにある sample.exe の簡単な C# の例です。この例では、固定文字列 "Mr./Mrs." を使用して入力用のプロパティにプレフィックスを付け、その結果を新しいプロパティに出力します。
using System;using System.Collections.Generic;
using System.Linq;using System.Xml.Linq;
using System.Text;namespace
Sample{
class Sample
{
public static readonly Guid FMTID_SummaryInformation = new Guid("F29F85E0-4FF9-1068-AB91-08002B27B3D9");
public static readonly Guid FMTID_UserDefinedProperties = new Guid("D5CDD505-2E9C-101B-9397-08002B2CF9AE");
static void Main(string[] args)
{ // Fetch the author property from the input item
XDocument inputDoc = XDocument.Load(args[0]);
var res = from cp in inputDoc.Descendants("CrawledProperty")
where new Guid(cp.Attribute("propertySet").Value).Equals(FMTID_SummaryInformation) &&
cp.Attribute("propertyId").Value == "4" &&
cp.Attribute("varType").Value == "31"
select cp.Value; // Create the output item
XElement outputElement = new XElement("Document");
// Add a crawled property where the author is prefixed with "Mr./Mrs."
if (res.Count() > 0 && res.First().Length > 0)
{
outputElement.Add(
new XElement("CrawledProperty",
new XAttribute("propertySet", FMTID_UserDefinedProperties),
new XAttribute("propertyName", "MyProperty"),
new XAttribute("varType", 31),
"Mr./Mrs. " + res.First())
);
}
outputElement.Save(args[1]);
}
}
}