コンテンツ・ベース検索
Content Engine の Java™ API および .NET API には、IBM® FileNet® Content Search Engine のコンテンツ・ベース検索 (CBR) 管理機能のための各種インターフェースが組み込まれています。 これらの API を使用すると、ドメインとサーバーの構成、索引領域の設定と構成、および索引ジョブの開始と管理を行うことができます。
索引処理および索引ジョブ
IBM Content Search Services の索引付けでは、オブジェクトのコンテンツや、それらのオブジェクトの文字列値プロパティーの全文検索に対応するために、データが索引形式で集約されます。CBR が有効になっているオブジェクトと文字列値プロパティーのみが、全文検索の対象になります。CBR の有効化は、ClassDefinition オブジェクトと PropertyDefinitionString オブジェクトの IsCBREnabled プロパティーのブール値によって制御されます。オブジェクトのコンテンツを全文検索できるようにしたり、その文字列値プロパティーを CBR 対応にしたりするには、そのオブジェクトのクラス (Document、Annotation、Folder、または CustomObject のクラスとサブクラスのみ) を定義する ClassDefinition オブジェクトを対象に CBR を有効にしなければなりません。CBR 対応オブジェクトの文字列値プロパティーの値を全文検索できるようにするには、そのプロパティーを定義する PropertyDefinitionString オブジェクトを対象に CBR を有効にしなければなりません。索引付けは、CBR 対応のすべてのオブジェクトおよびプロパティーに対して自動的に実行されます。索引付け操作はバッチの非同期操作であるため、結果はすぐには判明しません。CBR の使用可能化について詳しくは、「コンテンツ検索」を参照してください。
IndexJob オブジェクトを使用することにより、索引ジョブの状況を追跡したり、索引ジョブを開始して制御したりできます。一般に、索引ジョブは、破損した索引を再構築するか、構成の変更に対応する目的で開始されます。IndexJob オブジェクトの IndexRequests プロパティーには、索引ジョブと関連付けられたすべての索引要求のリストが含まれます。CmTextSearchIndexRequest クラスは、読み取り操作と更新操作、および索引要求の状況情報と追跡情報を提供します。
IndexJobItem 基本クラスは、以下に示す特定のタイプの索引ジョブを提供するためにサブクラス化されています。
- クラス索引ジョブ (IndexJobClassItem): 指定されたクラスのすべてのインスタンスに、全文検索用の索引が付けられます。クラス索引ジョブは、索引付けされるデータ量が非常に小さな場合でも、データベース上の表のスキャンが必要になります。大きいテーブルをスキャンすると、かなり長い時間がかかります。索引付けされるすべてのクラスを探して、データベース・テーブルが 1 回だけスキャンされます。必要な表スキャンの数を最小限にするには、同じテーブルに対して索引付けされるすべてのクラスについて、単一の索引ジョブ操作を使用します。
- 単一のオブジェクト索引ジョブ (IndexJobSingleItem): 1 つのオブジェクトに全文検索用の索引が付けられます。
- 再索引付け索引ジョブ: 既存の索引が再索引付けされます。
索引付け操作の実行中も、現在索引付けされているすべてのデータを全文検索で使用できます。ただし、全文照会の進行中に、新規索引データが使用できるようになる場合があります。この場合、照会は重複した一致を返します。照会では新旧両方の索引付けされたデータが使用されるためです。索引ジョブが完了すると、索引付けされたデータの古いコピーは削除され、重複した一致は発生しなくなります。
索引ジョブのキャンセル
JobAbortRequested プロパティーを true に設定すると、索引ジョブをキャンセルすることができます。また、予期しないエラーが発生した場合も、索引ジョブがキャンセルされる場合があります。索引ジョブがキャンセルされると、関連する索引要求もすべて削除されます。管理者によって索引ジョブがキャンセルされると、IndexJob オブジェクトの JobStatus プロパティーが CANCELED に設定されます。予期しないエラーの結果として索引ジョブが停止した場合は、JobStatus プロパティーの値が TERMINATED_ABNORMALLY になります。
An index job was cancelled on Object Store <objectstoreName>. The following full-text indexes will need to be replaced by running
full-text index reindex job(s) or base class with subclasses index job(s):
Full-text index name: <name> in Index Area: <index area name>
Full-text index name: <name> in Index Area: <index area name>
キャンセルされた索引ジョブのタイプに応じて、管理者が元の索引を再索引付する索引ジョブを作成することにより、この状態を解決することをお勧めします。
- 再索引操作の索引ジョブ: このタイプの索引ジョブがキャンセルされると、元の索引のリソース状態は CLOSED に設定されたままになります。 管理者が、この CLOSED 状態の索引に対する別の索引ジョブを作成することをお勧めします。
- 複数のサブクラスを持つルート・クラスの索引ジョブ: このタイプの索引ジョブがキャンセルされると、リソース状態が CLOSED に設定された索引が複数存在してしまう可能性があります。管理者が、複数のサブクラスを持つルート・クラスに対する別の索引ジョブを作成するか、CLOSED 状態の索引ごとに索引ジョブを作成することをお勧めします。 詳細については、「索引領域および索引の状況」を参照してください。
索引ジョブの一時停止および再開
IndexJob オブジェクトの JobPauseRequested プロパティーを true に設定して索引ジョブを一時停止すると、索引ジョブの JobStatus プロパティーが IndexJobStatus.PAUSED に更新され、索引ジョブによる新しい索引要求のディスパッチが停止します。ただし、既存の索引要求は一時停止されません。IndexJob オブジェクトの JobPauseRequested プロパティーを false に設定して索引ジョブを再開すると、索引ジョブの JobStatus プロパティーが IndexJobStatus.IN_PROGRESS に更新され、索引ジョブによる新しい索引要求のディスパッチが許可されます。
索引付けエラーの処理
種類を問わず、索引付けエラーはすべて Content Engine ログ・ファイルに記録されます。オプションで、索引付けエラーをオブジェクト・ストアで永続化することもできます。ObjectStore プロパティー IndexingFailureRecordingLevel は、索引付けエラーが保持されるかどうかを決定します。デフォルトの動作では、索引付けエラーはログに記録されるだけで、保持されません。
索引付けのエラー・コード
CBR 対応オブジェクトの索引付けが失敗した場合、CBR 対応オブジェクトの CmIndexingFailureCode プロパティーが IndexingFailureCode というエラー・コード定数に設定され、その失敗が Content Engine のログ・ファイルに記録されます。ObjectStore オブジェクトの IndexingFailureRecordingLevel プロパティーの値を PROPAGATE_TO_SOURCE に設定すると、エラー情報がすべての CBR 対応オブジェクトの CmIndexingFailureCode プロパティーに伝搬されます。
索引付けのエラー・コードが記録されるのは、関連するオブジェクトが Content Search Engine によって処理されたが、そのオブジェクトのコンテンツの一部またはすべてを全文検索用に索引付けできなかった場合 (例えば、テキスト・サイズの制限による切り捨てや、サポートされないフォーマット・タイプが使用されたことが原因で) だけです。索引付けのエラー・コードは、必ずしも、オブジェクトがまったく索引付けされなかったことを意味するわけではありません。サーバーは、オブジェクトに対して可能な限り多くの索引付けを実行しようとします。CBR 対応オブジェクトが正常に索引付けされている場合、CmIndexingFailureCode プロパティーの値はゼロになります。
システム・エラーの場合、索引付けエラー・コードは生成されません。このような場合は、索引付け操作が保持され、エラーの説明が Content Engine ログ・ファイルに書き込まれ、このエラーが直近の索引要求エラー説明の一部として記録され、システムが安定した状態になったときに索引付け操作が自動的に再試行されます。
索引付け要求エラー
索引付け要求エラーの原因は、関連する索引要求オブジェクト (CmTextSearchIndexRequest オブジェクト) に記録されます。 索引付け要求エラーは、索引要求オブジェクトの LastFailureReason プロパティーに記録されます。オブジェクトに関連する索引要求が正常に処理されると、そのオブジェクトに対して失敗した索引要求がすべて削除されます。つまり、CBR 対応オブジェクトが正常に索引付けされた場合は、失敗した索引要求はなくなります (CmIndexingFailureCode プロパティーがゼロになります)。通常、索引要求はシステム障害の場合のみ保持され、その索引要求は再試行する必要があります。
索引付けジョブ・エラー
場合によっては、エラーが索引要求処理ではなく、索引ジョブ処理に関係していることがあります。例えば、特定の索引ジョブの終了時に索引を削除する必要がありますが、この削除が失敗する場合があります。しかし、このエラーは、索引ジョブ自体が失敗したという意味ではありません。索引ジョブにより、関連する索引要求がすべて正常に送信された場合は、その索引ジョブの JobStatus プロパティーの値が必ず TERMINATED_NORMALLY (正常完了) になります。
索引ジョブに関するエラーが発生した場合、そのエラーについて特定された理由が IndexJob オブジェクトの LastFailureReason プロパティーに記録されます。
ドメインおよびサーバーの情報
全文での索引処理および検索を行うには、少なくとも 1 つの IBM Content Search Services サーバー構成をご使用の FileNet P8 ドメインに関連付ける必要があります。このような構成を作成するには、Factory.CmTextSearchServer メソッドの 1 つを使用して CmTextSearchServer オブジェクトを作成し、ご使用の FileNet P8 ドメインを表すドメイン・オブジェクトを指定します。作成してドメインに関連付けた各 CmTextSearchServer オブジェクトは、Domain オブジェクトの TextSearchServers プロパティーによって返された読み取り専用の CmTextSearchServerSet コレクション・オブジェクトに自動的に追加されます。IBM Content Search Services サーバーを作成した後は、その TextSearchServerStatus プロパティーを ENABLED に設定して、Content Engine サーバーによって認識されるようにする必要があります。 Content Engine サーバーは、IBM Content Search Services サーバーと通信できない場合、自己の TextSearchServerStatus プロパティーを自動的に UNAVAILABLE に設定します。IBM Content Search Services サーバーを使用可能にしたくない場合は、このサーバーの TextSearchServerStatus プロパティーを DISABLED に設定してください。 CmTextSearchServer オブジェクト・プロパティーを使用して、IBM Content Search Services サーバーのホスト、ポート番号、接続トークンを設定する必要があります。
IBM Content Search Services サーバーと FileNet P8 オブジェクトには、以下のような「多対 1」の関係があります。
- 複数のオブジェクト・ストアが同じ IBM Content Search Services サーバー構成オブジェクトを共有できます。
- 1 つの FileNet P8 ドメインに対して、複数の IBM Content Search Services サーバー構成オブジェクトが存在可能です。
CmTextSearchConfiguration オブジェクトのプロパティーを使用すると、Content Engine サーバー上で IBM Content Search Services の機能を制御することができます。CmTextSearchConfiguration オブジェクトは、Domain、Site、VirtualServer、および ServerInstance の各クラスの SubsystemConfiguration プロパティーに含まれます。使用する CmTextSearchConfiguration インスタンスは、これらのクラスによって、ServerInstance、VirtualServer、Site、Domain の順に優先されて決定されます。
索引領域および索引
IBM Content Search Services 索引領域とは、IBM Content Search Services によって更新および照会される全文検索の索引付けの実行に必要な情報が含まれている、ファイル・システム・ディレクトリーです。索引領域とオブジェクト・ストアとの間には、多対 1 の関係があります。各索引領域は 1 つのオブジェクト・ストア専用の索引領域ですが、1 つのファイル・システム上の 1 つのオブジェクト・ストアに複数の索引領域を使用することも、1 つのオブジェクト・ストアの索引付け情報を複数のファイル・システムにわたる複数の索引領域に分散することもできます。
各索引領域は CmTextSearchIndexArea オブジェクトで表されます。索引領域のファイル・システムの場所は、RootDirectoryPath プロパティーに格納されます。
各索引領域は、複数の索引 (CmTextSearchIndex オブジェクト) を保持できます。これらの索引は、TextSearchIndexes プロパティーで指定されます。索引と索引領域との間には、多対 1 の関係があります。CmTextSearchIndex オブジェクトは、必要に応じて、関連する索引領域に自動的に作成されます。索引付け可能なクラスがインスタンス化されている場合、そのクラスの基本クラスに関連付けられている CmTextSearchIndex オブジェクトと、オブジェクト・ストアで定義されているすべての索引パーティション化プロパティーを使用して、全文索引付け情報を参照することができます。基本クラスと索引パーティション化プロパティーに関連付けられている CmTextSearchIndex オブジェクトがない場合は、新しい CmTextSearchIndex オブジェクト (および IBM Content Search Services によって維持される対応する索引) が作成されます。索引は、その IndexName プロパティーによって識別されます。
IBM Content Search Services の索引付けサーバーと検索サーバーは、索引の更新と照会を行います。索引領域の索引にアクセスできるのは、その索引領域と同じサイト内のサーバーだけです (CmTextSearchServer オブジェクトと CmTextSearchIndexArea オブジェクトの Site プロパティー)。
索引付けの処理効率を改善するには、オブジェクト・ストアの TextSearchIndexingLanguages プロパティーの文字列リストに言語コードを追加して、そのオブジェクト・ストアでサポートされる言語を指定します。索引要求で索引付けされるドキュメントの言語を IBM Content Search Services サーバーが判別できない場合は、文字列リストの最初の言語コードが、索引要求のデフォルトの言語コードとして使用されます。このプロパティーで指定する言語は、このオブジェクト・ストア内のほとんどのドキュメントの言語と一致している必要があります。一致していないと、パフォーマンスに影響が出る可能性があります。このプロパティーがどの言語コードにも設定されておらず、非推奨の TextSearchIndexingLanguage プロパティーが以前に設定されていなかった場合は、索引付けの実行中にエラーが発生します。
オブジェクト・ストアに関連付けられている索引領域の数によっては、そのオブジェクト・ストアに関連付けられている IBM Content Search Services 索引サーバーの一部しか、索引付けの作業を実行しないことがあります。デフォルトでは、日付または文字列のパーティション化が構成されていない場合、開かれる全文検索索引はオブジェクト・ストアに関連付けられた索引領域ごとに 1 つのみです。すべての索引サーバーが索引付けの作業を実行するには、オブジェクト・ストアに関連付けられている索引領域の数は、索引サーバーの数と等しい必要があります。例えば、1 つの Content Platform Engine サーバー、単一の索引領域、および 2 つの IBM Content Search Services サーバーに関連付けられているオブジェクト・ストアを想定してください。単一の索引領域の場合、開かれるアクティブな全文検索索引は 1 つのみです (日付または文字列のパーティション化は使用されないと仮定します)。全文検索索引はリース期間において 1 つの IBM Content Search Services サーバーにのみアフィニティーを持つため、その全文検索索引で索引付けの作業を実行する IBM Content Search Services 索引サーバーは、一度に 1 つのみです。もう一方の索引サーバーはアイドルです。両方の索引サーバーが使用されるようにするには、オブジェクト・ストアに別の索引領域を関連付ける必要があります。
索引領域および索引の状況
索引領域 (CmTextSearchIndexArea オブジェクト) と索引 (CmTextSearchIndex オブジェクト) には、それぞれのオブジェクトの使用可能状況を指定する ResourceStatus プロパティーがあります。このプロパティーの値は、OPEN、CLOSED、または FULL のいずれかになります。CmTextSearchIndexArea オブジェクトの場合、ResourceStatus の値は STANDBY になることもあります。CmTextSearchIndex オブジェクトの場合、ResourceStatus の値は UNAVAILABLE になることもあります。
索引領域の状況
索引の状況 (ResourceStatus プロパティー) が OPEN に設定されている索引領域 (CmTextSearchIndexArea オブジェクト) でのみ、索引を作成することができます。 これに該当しない場合、リソースの状況が OPEN に設定されているオブジェクト・ストア内に索引領域が存在しなければ、そのオブジェクト・ストアで新しい索引を作成することはできません。
索引領域が最大容量に達すると、索引領域のリソース状況が自動的に FULL に設定されます。この設定は、この索引領域で新しいオブジェクトの索引付けを処理できないことと、この索引領域に新しい索引を作成できないことを示します。ただし、既存の索引に対して削除や照会を実行することはできます。 索引の数が MaxIndexes プロパティーの値に等しくなり、その索引のすべてが FULL または CLOSED のどちらかのリソース状況になった場合、その索引領域は容量がいっぱいになったと見なされます。
索引領域がいっぱいになり、リソース状況が STANDBY になっている別の索引領域が検出された場合、Content Engine サーバーは、スタンバイ状態になっている索引領域のリソース状況を OPEN に設定します。 スタンバイ状態になっている索引領域が複数存在する場合、Content Engine サーバーは、CmStandbyActivationPriorityプロパティーの値に応じて、優先順位が最も高いスタンバイ状態の索引領域を選択します。同じ優先順位の索引領域が複数以上存在する場合は、これらのスタンバイ状態の索引領域から、サーバーによっていずれかの索引領域がランダムに選択されます。
索引状況
索引の作成要求は、リソース状況 (ResourceStatus プロパティー) が OPEN に設定されている索引 (CmTextSearchIndex オブジェクト) にのみ書き込むことができます。ただし、既存の索引項目に対して、更新、削除、照会を実行することはできます。
索引のオブジェクト数が MaxObjectsPerIndex プロパティーの値と等しくなるか、索引のサイズが MaxSizePerIndexKbytes プロパティーで指定した値に達すると、Content Engine サーバーにより、索引のリソース状況が自動的に FULL に設定されます。索引のリソース状況が FULL に設定された後には、索引に対してこれ以上の索引作成要求を書き込むことができなくなります。ただし、既存の索引項目に対して削除や照会を実行することはできます。索引がいっぱいになると、リソース状況が OPEN になっている別の索引がある場合は、更新された索引データがその索引に自動的に書き込まれます。リソース状況が OPEN の索引が見つからない場合は、索引領域の最大索引限度 (MaxIndexes プロパティーで指定) に達していないと、同じ索引領域内に新しい索引が作成されます。索引領域の最大索引限度に達していて、OPEN に設定された別の索引領域がない場合は、STANDBY に設定されている索引領域 (ある場合) が自動的に OPEN に設定され、そこに新規索引が作成されます。
索引を削除するために索引ジョブが索引を閉じた場合、サーバーはその索引の ResourceStatus プロパティーを CLOSED に設定し、IndexingStatus プロパティーを REPLACING に設定します。 IndexingStatus プロパティーが REPLACING に設定されている間は、API を使用して索引の ResourceStatus プロパティーを CLOSED から OPEN に変更することはできません。索引ジョブがキャンセルされると、サーバーは索引の IndexingStatus プロパティーを NORMAL に設定します。ResourceStatus プロパティーは、API によって変更されない限り、CLOSED に設定されたままになります。
管理者は、索引のリソース状況を CLOSED に手動で設定することができます。CLOSED に設定されている索引では、エラーが抑止され、再索引付け操作全体が失敗する原因となるエラーが発生することなく、再索引付けを実行することができます。CLOSED 状況の索引は、索引要求を作成するために閉じられます。ただし、既存の索引項目に対して、更新、削除、照会を実行することはできます。
管理者は、索引のリソース状況を UNAVAILABLE に手動で設定することができます。この設定を行うのは、通常、索引が破損している場合や、その他の何らかの理由でアクセスできない場合です。UNAVAILABLE に設定されている索引では、エラーが抑止され、再索引付け操作全体が失敗する原因となるエラーが発生することなく、再索引付けを実行することができます。索引が UNAVAILABLE に設定されている場合は、検索結果が不完全なものになる可能性があるため、管理者からユーザーに通知することをお勧めします。UNAVAILABLE の状態は索引の最終的な状態であるため、索引をこの状態に設定すると、他の状態に設定することはできなくなります。使用できない索引については、可能な限り早く再索引付けすることをお勧めします。サーバーは、使用できない索引に対する保留中の索引要求を処理するために、自動的に新しい索引を作成するか、スタンバイ状態の索引を開きます。使用できない索引が再索引付けされると、その使用できない索引はサーバーによって削除されます。
索引要求
各索引要求は CBR 対応オブジェクトと関連付けられ、CmTextSearchIndexRequest クラスのインスタンスとなります。索引要求オブジェクトは、索引付け処理によって作成されます。API を使用して作成することはできません。CmTextSearchIndexRequest オブジェクトに対して読み取り操作と更新操作を実行できます。これらのオブジェクトには、状況情報、エラー情報、および再試行情報を保持するプロパティーがあります。CmTextSearchIndexRequest オブジェクトには、個別に割り当てられたセキュリティーはありません。このオブジェクトのセキュリティーは、クラスのデフォルトのインスタンス・セキュリティーによって提供されます。
SourceObject プロパティーは、索引要求の対象となる CBR 対応オブジェクトを識別し、IndexJob プロパティーは、その索引要求に関連する索引ジョブを識別し、IndexRequestStatus プロパティーは、その索引要求の状況を記録します。
索引要求のエラーに関する情報は、CmIndexingFailureCode プロパティー、LastFailureReason プロパティー、RetryCount プロパティーによって提供されます。これらのプロパティーと他の CmTextSearchIndexRequest プロパティーを使用することにより、特定の条件を満たす索引要求を検索することができます。例えば、再試行されないすべての失敗した索引要求をそれぞれの最後のエラー説明で検索したり、再試行されているすべての索引要求をそれぞれの最後のエラー説明で検索したりすることができます。
索引ジョブの処理中には、索引付けされるオブジェクトがフェッチされ、それらのオブジェクトの索引要求が IndexRequests テーブル内に挿入されます。このテーブルは、保留中の作業のキューとして機能します。大規模な索引ジョブの場合、これらの操作によって、多くのシステム・リソースが使用され、IndexRequests テーブルのサイズが増大する可能性があります。IndexRequests テーブルのサイズが限度を超えて増大するのを防止するために、IndexJob オブジェクトの MaxRequestQueueSize プロパティーを設定することにより、進行中または待機中の索引要求の数に対する制限を維持できます。この制限を設定すると、大規模な索引ジョブが原因で発生するパフォーマンス上の問題を防止できます。索引要求数の制限は、IndexRequests テーブル内に存在する索引ジョブの索引要求の数にのみ適用されます。これは、1 つの索引ジョブが作成できる索引要求の最大数に対する制限ではありません。
スキップ操作
索引要求に対してスキップ操作を指定することができます。スキップ操作の実行中は、索引要求の対象である CBR 対応オブジェクトの索引付けは実行されません。スキップ操作を指定するには、CmTextSearchIndexRequest オブジェクトの IndexingOperation プロパティーを SKIP に設定します。これにより、Content Engine サーバーは、その索引要求の CmIndexingFailureCodeプロパティーを MARKED_AS_SKIPPED に設定し、CBR 対応オブジェクトの IndexationId プロパティーを NULL に設定します。
索引パーティション
索引パーティションは、パーティション化された IBM Content Search Services 索引に入れるために索引付けできる CBR 対応オブジェクトがどれであるかを判別します。 パーティション化制約を満たす CBR 対応オブジェクトのみが索引に格納されます。 テキスト検索照会に索引パーティション化プロパティーが指定されている場合は、同じ索引パーティション化プロパティー名および値を持つ索引のみが検索されます。オブジェクト・ストアに索引パーティション化を構成すると、アプリケーションが照会で索引パーティション化プロパティーを使用する場合に、照会の結果として検索が必要になる索引の数を減らすことができます。
それぞれの IBM Content Search Services 索引では、IndexPartitionConstraints プロパティーを使用して、ゼロから 2 つの CmIndexPartitionConstraint オブジェクトのリストが保持されます。このリストは読み取り専用で、Content Engine サーバーによって維持されます。 個々の CmIndexPartitionConstraint オブジェクトは、オブジェクト・ストアに関連付けられた索引パーティション化プロパティー (CmTextSearchPartitionProperty オブジェクトによって表される) に対応しています。索引パーティション化プロパティーとして割り当てられている CBR 対応オブジェクトの各プロパティーは、設定が SETTABLE_ONLY_ON_CREATE のカスタムの文字列値プロパティーまたは日付値プロパティーでなければなりません。1 つのオブジェクト・ストアに文字列と日付の索引パーティション化プロパティーをそれぞれ複数割り当てることはできません。
索引付けおよび特殊文字
特殊文字は、特殊文字のシーケンスがない限り、先行する用語と同じ位置に索引付けされます。特殊文字のシーケンスがある場合、そのシーケンスは順序なしの個別トークンとして索引付けされます (文字の順序付けは無視されます)。照会内の特殊文字について詳しくは、「特殊文字」を参照してください。