コンテンツ・ベース検索の操作
サーバー・インスタンスの作成および構成
CmTextSearchServer インターフェースには、ドメイン内の特定の IBM® Content Search Services サーバー用の接続プロパティーおよび構成プロパティーがあります各サーバーは、特定のサイトに関連付けられており、そのサイト内のどのオブジェクト・ストアからでも使用できます。 Site プロパティーの値を設定することで、サーバー用のサイトを指定できます。値を指定しなかった場合、デフォルトで Domain オブジェクトの DefaultSite プロパティーの値が使用されます。
新規の CmTextSearchServer オブジェクトを作成する場合は、サーバーのホスト名およびポート番号を指定する必要があります。
このサーバーに接続するために必要な接続 (認証) トークンも指定する必要があります。 このトークンとトークンの取得方法について詳しくは、「IBM Content Search Services 認証トークンの取得」を参照してください。
サーバーの DisplayName プロパティーと DescriptiveText プロパティーを設定することをお勧めします。これにより、ユーザーはサーバーを識別しやすくなります。
さらに、TextSearchServerMode プロパティーの値を設定して、使用モード (サーバーが索引付けタスクを実行するのか、検索タスクを実行するのかを示す) を指定することをお勧めします。このプロパティーの値を設定しなかった場合、デフォルトの値は 0 (ゼロ) になります。この場合、サーバーは、索引付けタスクと検索タスクの両方を実行します。アプリケーションを一般の実動システムで使用する場合は、このデフォルト設定は推奨されません。複数のタスク専用サーバーを使用することで、実動システムでの作業負荷のバランスを取ることができます。
Content Engine サーバーと IBM Content Search Services サーバーとの間で SSL 接続を使用することを選択して、2 つのサーバー間で検索要求を含むすべての通信を暗号化することができます。この機能は、CmTextSearchServer プロパティーの IsSSLEnabled、ValidateCertificateHost、および ValidateServerCertificate によって制御されます。デフォルトでは、SSL 接続は無効になっています。
その他の設定可能なプロパティーには、TextSearchServerStatus プロパティー (サーバーを使用可能または使用不可にする) および TextSearchServerShutdownOnDisable プロパティー (TextSearchServerStatus プロパティーが DISABLED に設定されている場合に、このサーバーにシャットダウン要求を送信するかどうかを指定する) があります。詳細情報については、CmTextSearchServer プロパティーを参照してください。
以下のコード例では、デフォルト・サイトで、索引付けと検索を実行する IBM Content Search Services サーバーを作成する方法を示します。
Java™ の例
// CmTextSearchServer インスタンスを作成
// ObjectStore オブジェクトが存在することを前提とする
Domain myDomain = os.get_Domain();
CmTextSearchServer tss = Factory.CmTextSearchServer.createInstance(myDomain);
// このサーバーの名前を指定する
tss.set_DisplayName("tsServer1");
// サーバーのホストとポートを割り当てる
tss.set_TextSearchServerHost("tsServerHost");
tss.set_TextSearchServerPort(8191);
// 認証トークンを指定する
tss.set_TextSearchCredential("EPhhaz0=".getBytes());
// このサーバーの使用モードを設定して有効にする
tss.set_TextSearchServerMode(TextSearchServerMode.INDEX_AND_SEARCH);
tss.set_TextSearchServerStatus(TextSearchServerStatus.ENABLED);
// サーバーのサイトを設定する
tss.set_Site(myDomain.get_DefaultSite());
// サーバーを保存する
tss.save(RefreshMode.REFRESH);
C# の例
// CmTextSearchServer インスタンスを作成
// ObjectStore オブジェクトが存在することを前提とする
IDomain myDomain = os.Domain;
ICmTextSearchServer tss = Factory.CmTextSearchServer.CreateInstance(myDomain);
// このサーバーの名前を指定する
string serverName = "tsServer1";
tss.DisplayName = serverName
// サーバーのホストとポートを割り当てる
string myMachine = "tsServer1";
tss.TextSearchServerHost = myMachine;
tss.TextSearchServerPort = 8191;
// 認証トークンを指定する
byte [] authToken = { (byte)'E', (byte) 'P', (byte)'h', (byte)'h', (byte)'a', (byte)'z', (byte)'0', (byte)'='};
tss.TextSearchCredential = authToken;
// このサーバーの使用モードを設定して有効にする
tss.TextSearchServerMode = TextSearchServerMode.INDEX_AND_SEARCH;
tss.TextSearchServerStatus = TextSearchServerStatus.ENABLED;
// サーバーのサイトを設定する
tss.Site = myDomain.Site
// サーバーを保存する
tss.Save(RefreshMode.NO_REFRESH);
索引要求処理の構成
CmTextSearchConfiguration オブジェクトのプロパティーを使用すると、Content Engine サーバー上で IBM Content Search Services の機能を制御できます。パフォーマンス上の問題が原因で、これらのプロパティーのデフォルト値の変更を考慮する必要が生じることがあります。例えば、デフォルト値を変更すると便利なプロパティーの 1 つに、ThreadCount プロパティーがあります。ThreadCount プロパティーのデフォルト値は 4 です。使用可能な Content Engine サーバーの数が少ない場合は、この値を高い数値に設定し、使用可能な Content Engine サーバーの数が多い場合は、この値を低い数値に設定してください。 詳細情報については、CmTextSearchConfiguration プロパティーを参照してください。
以下の例では、ThreadCount プロパティーの値を大きくします。
Java の例
// ThreadCount の値をデフォルトの 4 から 16 に増やす
Domain domain = os.get_Domain();
Iterator iterator1 = domain.get_SubsystemConfigurations().iterator();
while (iterator1.hasNext()) {
SubsystemConfiguration subsystem = (SubsystemConfiguration) iterator1.next();
System.out.println("Setting thread count");
if (subsystem instanceof CmTextSearchConfiguration)
((CmTextSearchConfiguration) subsystem).set_ThreadCount(new Integer(16));
}
domain.save(RefreshMode.NO_REFRESH);
C# の例
// ThreadCount の値をデフォルトの 4 から 16 に増やす
IDomain domain = os.Domain;
foreach (ISubsystemConfiguration subsystem in domain.SubsystemConfigurations)
{
if (subsystem is ICmTextSearchConfiguration)
{
System.Console.WriteLine("Setting thread count");
((ICmTextSearchConfiguration)subsystem).ThreadCount = 16;
}
}
domain.Save(RefreshMode.NO_REFRESH);
索引領域の構成
CmTextSearchIndexArea インターフェースには、オブジェクト・ストアの索引領域を構成するプロパティーが含まれます。オブジェクト・ストアごとに、複数の索引領域を指定できます。この索引領域に索引を作成できるのは、特定の索引領域と同じサイト内に存在する IBM Content Search Services サーバーだけです。オブジェクト・ストア内のすべての索引領域が、そのオブジェクト・ストアと同じサイト内に存在している必要があります。
索引領域ごとに、作成可能な索引の数と、これらの各索引の容量を制御することができます。さらに、これらの索引を格納するルート・ディレクトリーを指定することもできます。詳細情報については、CmTextSearchIndexArea プロパティーを参照してください。
索引領域を構成する一般的なシーケンスは次のとおりです。
Java の例
// (自動作成される) CmTextSearchIndex オブジェクトを格納するための
// CmTextSearchIndexArea インスタンスを作成
// このオブジェクトには、全文インデックス情報が含まれる
// ObjectStore オブジェクトが存在することを前提とする
CmTextSearchIndexArea myIndexArea = Factory.CmTextSearchIndexArea.createInstance(os, null);
// この索引領域に使用するファイル・システム・パスを設定。この索引領域は、同じサイト
// またはアフィニティー・グループのすべての CSS サーバー間で共有する必要がある。すべての CSS サーバーに、
// この共有ストレージへの読み取り/書き込みアクセス権限が必要。例 (Windows):
String path = "¥¥¥¥MyServer¥¥IndexArea1";
myIndexArea.set_RootDirectoryPath(path);
// この索引領域において作成可能な全文検索索引の最大数を設定
// 索引領域ごとの全文検索索引の数に特定の制限を設けない場合は、
// デフォルトである -1 (無制限を示す) を使用する。制限を設ける場合は、このプロパティーをデフォルト以外の値に設定
// 例:
myIndexArea.set_MaxIndexes(new Integer(10));
// この索引領域内の 1 つの全文検索索引における索引付きオブジェクトの最大数を設定
// この索引領域内の 1 つの全文検索索引の索引付きオブジェクトの数は、
// MaxSizePerIndexKbytes の構成設定によって異なる。たとえば、以下のように指定します。
// MaxSizePerIndexKbytes を 250GB に設定したときに、1 つの全文検索索引に 500 万個のオブジェクトが含まれ、
// 別の全文検索索引に 1,000 万個のオブジェクトが含まれる場合がある。
// これはすべて、その特定の 250GB の全文検索索引内で索引付けされ、保管されるコンテンツに
// 依存する。
//
// 全文検索索引ごとのオブジェクトの数に特定の制限を設けない場合は、
// デフォルトである -1 (無制限を示す) を使用する。無制限を設定した場合、CPE では
// この索引領域の 1 つの全文検索索引における索引付きオブジェクトの数は制限されない。
// 制限を設ける場合は、このプロパティーをデフォルト以外の値に設定する。例:
myIndexArea.set_MaxObjectsPerIndex(new Double(10000000));
// この索引領域にある全文検索索引の 1 つの索引の最大サイズ (キロバイト) を設定
// 現在のデフォルト値は 262144000 (250GB) (推奨値)。
// デフォルト以外の値を使用する場合は、このプロパティーを明示的に以下のように設定する。
myIndexArea.set_MaxSizePerIndexKbytes(new Double(250000000));
// 表示名を設定
myIndexArea.set_DisplayName("ObjectStore1-IndexArea1");
// 状況 (open、closed、standby) を設定
myIndexArea.set_ResourceStatus(ResourceStatus.OPEN);
// サイトを指定
myIndexArea.set_Site(os.get_Site());
// スタンバイ・モードになっている場合に、この索引領域をアクティブにするための優先順位を設定する
myIndexArea.set_CmStandbyActivationPriority(1);
// 索引領域を保存
myIndexArea.save(RefreshMode.NO_REFRESH);
C# の例
// (自動作成される) CmTextSearchIndex オブジェクトを格納するための
// CmTextSearchIndexArea インスタンスを作成
// このオブジェクトには、全文インデックス情報が含まれる
// ObjectStore オブジェクトが存在することを前提とする
ICmTextSearchIndexArea myIndexArea = Factory.CmTextSearchIndexArea.CreateInstance(os, null);
// この索引領域に使用するファイル・システム・パスを設定。この索引領域は、同じサイト
// またはアフィニティー・グループのすべての CSS サーバー間で共有する必要がある。すべての CSS サーバーに、
// この共有ストレージへの読み取り/書き込みアクセス権限が必要。例 (Windows):
string path = "¥¥¥¥MyServer¥¥IndexArea1";
myIndexArea.RootDirectoryPath = path;
// この索引領域において作成可能な全文検索索引の最大数を設定
// 索引領域ごとの全文検索索引の数に特定の制限を設けない場合は、
// デフォルトである -1 (無制限を示す) を使用する。制限を設ける場合は、このプロパティーをデフォルト以外の値に設定
// 例:
myIndexArea.MaxIndexes = 10;
// この索引領域内の 1 つの全文検索索引における索引付きオブジェクトの最大数を設定
// この索引領域内の 1 つの全文検索索引の索引付きオブジェクトの数は、
// MaxSizePerIndexKbytes の構成設定によって異なる。
// 例えば、MaxSizePerIndexKbytes を 250GB に設定したときに、1 つの全文検索索引に
// 500 万個のオブジェクトが含まれ、別の全文検索索引に 1,000 万個のオブジェクトが含まれる場合がある。
// これはすべて、その特定の 250GB の全文検索索引内で索引付けされ、保管されるコンテンツに依存する。
//
// 全文検索索引ごとのオブジェクトの数に特定の制限を設けない場合は、
// デフォルトである -1 (無制限を示す) を使用する。無制限を設定した場合、CPE では
// この索引領域の 1 つの全文検索索引における索引付きオブジェクトの数は制限されない。
// 制限を設ける場合は、このプロパティーをデフォルト以外の値に設定する。例:
myIndexArea.MaxObjectsPerIndex = 10000000;
// この索引領域にある全文検索索引の 1 つの索引の最大サイズ (キロバイト) を設定
// 現在のデフォルト値は 262144000 (250GB) (推奨値)。
// デフォルト以外の値を使用する場合は、このプロパティーを明示的に以下のように設定する。
myIndexArea.MaxSizePerIndexKbytes = 250000000;
// 表示名を設定
myIndexArea.DisplayName = "ObjectStore1-IndexArea1";
// 状況 (open、closed、standby) を設定
myIndexArea.ResourceStatus = ResourceStatus.OPEN;
// サイトを指定
myIndexArea.Site = os.Site;
// スタンバイ・モードになっている場合に、この索引領域をアクティブにするための優先順位を設定する
myIndexArea.CmStandbyActivationPriority = 1;
// 索引領域を保存
myIndexArea.Save(RefreshMode.NO_REFRESH);
オブジェクト・ストアの IBM Content Search Services の使用可能化
オブジェクト・ストアの IBM Content Search Services を使用可能にするには、その前に CmTextSearchServer インスタンスがオブジェクト・ストアと同じサイト内に存在し、CmTextSearchIndexArea オブジェクトがオブジェクト・ストア内に存在している必要があります。自動言語選択の精度を高めて索引付け処理のパフォーマンスを改善するために、索引付けの対象となる、最もよく使用されるファイルの言語コードを設定してください。
Java の例
// オブジェクト・ストアに対して IBM Content Search Services を有効にする
// ObjectStore オブジェクトが存在することを前提とする
os.set_TextSearchEnabled(Boolean.TRUE);
// このオブジェクト・ストアの全文検索用索引付けの言語コードを英語とフランス語に設定する
StringList langcodes = Factory.StringList.createList();
langcodes.add("en");
langcodes.add("fr");
os.set_TextSearchIndexingLanguages(langcodes);
// 変更をオブジェクト・ストアに保存する
os.save(RefreshMode.NO_REFRESH);
C# の例
// オブジェクト・ストアに対して IBM Content Search Services を有効にする
// ObjectStore オブジェクトが存在することを前提とする
os.TextSearchEnabled = true;
// このオブジェクト・ストアの全文検索用索引付けの言語コードを英語とフランス語に設定する
IStringList langcodes = Factory.StringList.CreateList();
langcodes.Add("en");
langcodes.Add("fr");
os.TextSearchIndexingLanguages = langcodes;
// 変更をオブジェクト・ストアに保存する
os.Save(RefreshMode.NO_REFRESH);
索引処理の管理
1 つの索引ジョブは、索引処理用に選択したアイテムと、ジョブのその他の構成プロパティーで構成されます。アイテムには、クラス、IBM Content Search Services 索引、または単一のオブジェクトがあります。 索引ジョブは、作成、モニター、および停止することができます。
索引ジョブの作成
IndexJob インターフェースを使用して、索引ジョブを作成および構成します。索引処理できるアイテムは、IndexJobClassItem、IndexJobCollectionItem、および IndexJobSingleItem の各インターフェースを使用して割り当てられます。
索引ジョブを作成および構成する一般的なシーケンスは次のとおりです。
Java の例
// IndexJob インスタンスを作成
// ObjectStore オブジェクトが存在することを前提とする
IndexJob indexJob = Factory.IndexJob.createInstance(os);
// 索引付けするアイテムを格納するためのジョブ・アイテム・リストを作成
IndexJobItemList indexJobItemList = Factory.IndexJobItem.createList();
// 索引付けするアイテムとして、IndexJobClassItem、IndexJobCollectionItem、
// IndexJobSingleItem のいずれかを指定
// クラスを索引付けするために、クラス・アイテムのインスタンスを作成
IndexJobClassItem indexJobClassItem = Factory.IndexJobClassItem.createInstance(os);
// クラス・アイテムの ClassDefinition オブジェクトを作成
ClassDefinition classDef = Factory.ClassDefinition.getInstance(os, null);
// 索引付けするクラスを指定
indexJobClassItem.set_ClassDefinition(classDef);
indexJobItemList.add(indexJobClassItem);
// コレクションを索引付けするために、コレクション・アイテムのインスタンスを作成
IndexJobCollectionItem indexJobCollectionItem = Factory.IndexJobCollectionItem.createInstance(os);
// 索引領域のインスタンスを取得。IndexArea GUID が有効であることを前提とする
CmTextSearchIndexArea myIndexArea = Factory.CmTextSearchIndexArea.fetchInstance(os, new Id("{E7961EFD-BB0C-4ACA-9B41-35E3AD8E2771}"), null);
// CmTextSearchIndex オブジェクトのリストを取得。索引付けする初期コレクションを選択。
CmTextSearchIndexList tsiList = myIndexArea.get_ TextSearchIndexes ();
CmTextSearchIndex tsIndex = (CmTextSearchIndex) tsiList.get(0);
// 索引付けするコレクションを指定
Id myCollectionID = tsIndex.get_Id();
indexJobCollectionItem.set_IndexationId(myCollectionID);
indexJobItemList.add(indexJobCollectionItem);
// オブジェクトを索引付けするために、オブジェクト・アイテムのインスタンスを作成
IndexJobSingleItem indexJobSingleItem = Factory.IndexJobSingleItem.createInstance(os);
// 索引付けするオブジェクト (この場合は、オブジェクト・ストアのルート・フォルダー) を指定
// 実際には、ルート・フォルダーの索引付けはかなり時間がかかり、
// 処理を多く必要とする可能性があるため、注意が必要
indexJobSingleItem.set_SingleItem(os.get_RootFolder());
indexJobItemList.add(indexJobSingleItem);
// 索引ジョブ・アイテムを指定し、その索引ジョブを保存
indexJob.set_IndexItems(indexJobItemList);
indexJob.save(RefreshMode.REFRESH);
C# の例
// IndexJob インスタンスを作成
// ObjectStore オブジェクトが存在することを前提とする
IIndexJob indexJob = Factory.IndexJob.CreateInstance(os);
IIndexJobItemList indexJobItemList = Factory.IndexJobItem.CreateList();
// 索引付けするアイテムを格納するためのジョブ・アイテム・リストを作成
IIndexJobClassItem indexJobClassItem = Factory.IndexJobClassItem.CreateInstance(os);
// 索引付けするアイテムとして、IndexJobClassItem、IndexJobCollectionItem、
// IndexJobSingleItem のいずれかを指定
// クラス・アイテムの ClassDefinition オブジェクトを作成
IClassDefinition classDef = Factory.ClassDefinition.GetInstance(os, null);
// クラスを索引付けするために、クラス・アイテムのインスタンスを作成
indexJobClassItem.ClassDefinition = classDef;
// 索引付けするクラスを指定
indexJobItemList.Add(indexJobClassItem);
// コレクションを索引付けするために、コレクション・アイテムのインスタンスを作成
IIndexJobCollectionItem indexJobCollectionItem = Factory.IndexJobCollectionItem.CreateInstance(os);
// 索引領域のインスタンスを取得。IndexArea GUID が有効であることを前提とする
ICmTextSearchIndexArea myIndexArea = Factory.CmTextSearchIndexArea.FetchInstance(os, new Id("{E7961EFD-BB0C-4ACA-9B41-35E3AD8E2771}"), null);
// CmTextSearchIndex オブジェクトのリストを取得。索引付けする初期コレクションを選択。
ICmTextSearchIndexList tsiList = myIndexArea.TextSearchIndexes
ICmTextSearchIndex tsIndex = (ICmTextSearchIndex) tsiList[0];
// 索引付けするコレクションを指定
Id myCollectionID = tsIndex.Id;
indexJobCollectionItem.IndexationId = myCollectionID;
indexJobItemList.Add(indexJobCollectionItem);
// オブジェクトを索引付けするために、オブジェクト・アイテムのインスタンスを作成
IIndexJobSingleItem indexJobSingleItem = Factory.IndexJobSingleItem.CreateInstance(os);
// 索引付けするオブジェクト (この場合は、オブジェクト・ストアのルート・フォルダー) を指定
// 実際には、ルート・フォルダーの索引付けはかなり時間がかかり、
// 処理を多く必要とする可能性があるため、注意が必要
indexJobSingleItem.SingleItem = os.RootFolder;
indexJobItemList.Add(indexJobSingleItem);
// 索引ジョブ・アイテムを指定し、その索引ジョブを保存
indexJob.IndexItems = indexJobItemList;
indexJob.Save(RefreshMode.REFRESH);
索引ジョブの状況のモニター
IndexJobStatus クラスには、索引ジョブの状況を示す定数が含まれます。IndexJob.get_JobStatus を使用して、関連付けられている IndexJobStatus オブジェクトを返します。 次に例を示します。
Java の例
indexJob.refresh();
System.out.println("JobStatus : " + indexJob.get_JobStatus().toString());
C# の例
indexJob.Refresh();
System.Console.WriteLine("JobStatus : " + indexJob.JobStatus.ToString());
索引ジョブのエラー情報の取得
IndexJob.get_LastFailureReason を使用して、索引ジョブの最終エラー条件を識別する文字列を返します。 次に例を示します。
Java の例
indexJob.refresh();
System.out.println("Job Failure : " + indexJob.get_LastFailureReason());
C# の例
indexJob.Refresh();
System.Console.WriteLine("Job Failure : " + indexJob.LastFailureReason());
索引要求オブジェクトのフェッチ
ファクトリー・メソッド Factory.CmIndexRequest.fetchInstance を使用して、索引要求オブジェクトをフェッチします。
Java の例
// 索引要求をフェッチ
CmIndexRequest requestObject=Factory.CmIndexRequest.fetchInstance(os, "{9FEC3C69-57B2-4E29-872A-0EE452881555}", null );
C# の例
// 索引要求をフェッチ
ICmIndexRequest requestObject=Factory.ICmIndexRequest.fetchInstance(os, "{9FEC3C69-57B2-4E29-872A-0EE452881555}", null );
索引要求の状況のモニター
IndexRequestStatus クラスには、索引要求の状況を示す定数が含まれます。CmIndexRequest.get_IndexRequestStatus を使用して、関連付けられている IndexRequestStatus オブジェクトを返します。 次に例を示します。
Java の例
indexRequest.refresh();
System.out.println("RequestStatus : " + indexRequest.get_IndexRequestStatus().toString());
C# の例
indexRequest.Refresh();
System.Console.WriteLine("JobStatus : " + indexRequest.IndexRequestStatus.ToString());
索引要求のスキップ
索引要求の対象となる CBR 対応オブジェクトの索引付けをスキップするには、IndexRequestStatus オブジェクトの IndexingOperation プロパティーを使用します。 次に例を示します。
Java の例
indexRequest.set_IndexingOperation(IndexingOperation.SKIP);
C# の例
indexRequest.IndexingOperation = IndexingOperation.SKIP;
索引要求のエラー情報の取得
CmIndexRequest.get_CmIndexingFailureCode を使用して、索引要求のエラー条件を識別する整数コードを返します。索引付けエラー・コードは、IndexingFailureCode クラス内の定数を参照します。 次に例を示します。
Java の例
indexRequest.refresh();
System.out.println("Request Failure : " + indexRequest.get_CmIndexingFailureCode());
C# の例
indexRequest.Refresh();
System.Console.WriteLine("Request Failure : " + indexRequest.CmIndexingFailureCode());
索引ジョブの一時停止および再開
索引ジョブを一時停止するための要求を送信するには、JobPauseRequested プロパティーのブール値を設定します。このアクションにより、索引ジョブの JobStatus プロパティーが IndexJobStatus.PAUSED
に更新されます。次に例を示します。
Java の例
indexJob.set_JobPauseRequested(Boolean.TRUE);
indexJob.save(RefreshMode.REFRESH)
C# の例
indexJob.JobPauseRequested=true;
indexJob.Save(RefreshMode.REFRESH)
索引ジョブを再開するには、以下のようにします。
Java の例
indexJob.set_JobPauseRequested(Boolean.FALSE);
indexJob.save(RefreshMode.REFRESH)
C# の例
indexJob.JobPauseRequested=false;
indexJob.Save(RefreshMode.REFRESH)
索引ジョブのキャンセル
ブール値 IndexJob.set_JobAbortRequested を設定することにより、保留中の索引ジョブを取り消す要求を実行依頼できます。 次に例を示します。
Java の例
indexJob.set_JobAbortRequested(Boolean.TRUE);
indexJob.save(RefreshMode.REFRESH)
C# の例
indexJob.JobAbortRequested= true;
indexJob.Save(RefreshMode.REFRESH)
索引パーティションの作成
IBM Content Search Services の索引をパーティション化すると、日付プロパティーまたは文字列プロパティー (あるいはその両方) を使用して、オブジェクトの大規模な索引付けを処理することができます。パーティション化の条件がある照会とともに索引パーティションを使用することにより、CBR 照会の一環として検索しなければならない索引の数を減らすことができます。
オブジェクト・ストアへの Date パーティションの追加
索引パーティション化プロパティーとして指定できる Date プロパティーは、1 つのオブジェクト・ストアにつき 1 つのみです。パーティション化プロパティー名を変更すると (つまり、オブジェクト・ストア内の別のパーティション化プロパティーを選択すると)、これらのプロパティーを持つ対象の Document クラスのすべてについて、再索引付けが必要になる可能性があります。ただし、対象となる Document クラスの再索引付けを行うことなく、パーティション化プロパティー条件を変更できます。
Java の例
// receivedDate という既存の Date プロパティーを持つ
// ObjectStore オブジェクトが存在することを前提とする
// 既存のパーティション化プロパティー・リストを
// オブジェクト・ストアから取得して、
// それに Date パーティション・プロパティーを追加する
CmTextSearchPartitionPropertyList ppl = os.get_PartitioningProperties();
CmTextSearchPartitionDateProperty dateProp = Factory.CmTextSearchPartitionDateProperty.createInstance();
// Date データ型および「settable-only-on-create」の
// 設定可能性を持つ既存のカスタム・プロパティーの名前を
// オブジェクト・ストアに設定する
dateProp.set_PartitionPropertyName("receivedDate");
// 索引の存続期間の長さ (月単位) を
// 設定する
dateProp.set_PartitionDateInterval(3);
// この Date プロパティーをオブジェクト・ストアの
// パーティション・プロパティー・リストに追加する// このリストに追加可能な Date プロパティーは、最大でも 1 つ
ppl.add(dateProp);
// 変更をオブジェクト・ストアに保存する
os.save(RefreshMode.REFRESH);
C# の例
// receivedDate という既存の Date プロパティーを持つ
// ObjectStore オブジェクトが存在することを前提とする
// 既存のパーティション化プロパティー・リストを
// オブジェクト・ストアから取得して、
// それに Date パーティション・プロパティーを追加する
ICmTextSearchPartitionPropertyList ppl = os.PartitioningProperties();
ICmTextSearchPartitionDateProperty dateProp = Factory.CmTextSearchPartitionDateProperty.createInstance();
// Date データ型および「settable-only-on-create」の
// 設定可能性を持つ既存のカスタム・プロパティーの名前を
// オブジェクト・ストアに設定する
dateProp.PartitionPropertyName = "receivedDate";
// 索引の存続期間の長さ (月単位) を
// 設定する
dateProp.PartitionDateInterval = 3;
// この Date プロパティーをオブジェクト・ストアの
// パーティション・プロパティー・リストに追加する// このリストに追加可能な Date プロパティーは、最大でも 1 つ
ppl.Add(dateProp);
// 変更をオブジェクト・ストアに保存する
os.Save(RefreshMode.REFRESH);
オブジェクト・ストアへの String パーティションの追加
索引パーティション化プロパティーとして指定できる String プロパティーは、1 つのオブジェクト・ストアにつきの 1 つのみです。パーティション化プロパティーの名前を変更するか (つまり、オブジェクト・ストア内の別のパーティション化プロパティーを選択するか)、オブジェクト・ストアからプロパティーを削除すると、これらのプロパティーに関連するすべての Document クラスの再索引付けが必要になる場合があります。ただしパーティション化プロパティーの条件は、関連する Document クラスの再索引なしに、変更できます。
Document クラスの文字列型パーティション化プロパティーの値を使用することにより、これがどの CmTextSearchIndex 索引に索引付けされているかを判別できます。例えば、複数ソースからドキュメントをインポートするシナリオで、ドキュメントの起点 (E メール、ファイルなど) を識別するために Document クラスのカスタム・プロパティー (Origin など) を使用することが考えられます。この Origin プロパティーは、オブジェクト・ストアで、文字列型パーティション化プロパティーとして指定されます。email という Origin プロパティー値を持つドキュメントは、他の email ドキュメントのみを持つ CmTextSearchIndex 索引内に索引付けされます。同様に、file という Origin プロパティー値を持つドキュメントは、他の file ドキュメントのみを持つ CmTextSearchIndex 索引内に索引付けされます。
Java の例
// tenant という既存の String プロパティーを持つ
// ObjectStore オブジェクトが存在することを前提とする
// 既存のパーティション化プロパティー・リストを
// オブジェクト・ストアから取得して、
// それに String パーティション化プロパティーを追加する
CmTextSearchPartitionPropertyList ppl = os.get_PartitioningProperties();
CmTextSearchPartitionStringProperty stringProp = Factory.CmTextSearchPartitionStringProperty.createInstance();
// String データ型および「settable-only-on-create」の
// 設定可能性を持つ既存のカスタム・プロパティーの名前を
// オブジェクト・ストアに設定する
stringProp.set_PartitionPropertyName("tenant");
// この String プロパティーをオブジェクト・ストアの
// パーティション化プロパティー・リストに追加する // このリストに追加可能な String プロパティーは、最大でも 1 つ
ppl.add(stringProp);
// 変更をオブジェクト・ストアに保存する
os.save(RefreshMode.REFRESH);
C# の例
// tenant という既存の String プロパティーを持つ
// ObjectStore オブジェクトが存在することを前提とする
// 既存のパーティション化プロパティー・リストを
// オブジェクト・ストアから取得して、
// それに String パーティション化プロパティーを追加する
ICmTextSearchPartitionPropertyList ppl = os.PartitioningProperties();
ICmTextSearchPartitionStringProperty stringProp = Factory.CmTextSearchPartitionStringProperty.createInstance();
// String データ型および「settable-only-on-create」の
// 設定可能性を持つ既存のカスタム・プロパティーの名前を
// オブジェクト・ストアに設定する
stringProp.PartitionPropertyName = "tenant";
// この String プロパティーをオブジェクト・ストアの
// パーティション化プロパティー・リストに追加する// このリストに追加可能な String プロパティーは、最大でも 1 つ
ppl.Add(stringProp);
// 変更をオブジェクト・ストアに保存する
os.Save(RefreshMode.REFRESH);