C++ でのパラメトリック検索とテキスト検索の組み合わせは、次の 5 つのステップで行います。
- 照会オプションを指定します。 使用しようとしているデータを要求する際には、常にリトリーブ・オプションを指定して、
最適化を使用可能にしてください。
C++ では、DKNVPair[] オプション配列には、常に、照会操作が終了を検出するための特別な END エレメント
がなければなりません。例えば、
2 つのオプションを指定したい場合は、オプションの配列には 3 つのエレメントが必要で、
最後のエレメントが END エレメントです。
DB2 Text Search では C++ 検索コードはサポートされないため、このプロシージャーは Net Search Extender にのみ適用されます。
DKNVPair* parms = new DKNVPair[3];
//Allow a maximum of 5 items to be returned from the search
pparm[0].(DK_CM_PARM_MAX_RESULTS, DKString(“5”));
//Specify what content is to be retrieved
DKRetrieveOptionsICM* dkRetrieveOptions =
DKRetrieveOptionsICM::createInstance(dsICM);
dkRetrieveOptions->baseAttributes(TRUE);
pparm[1].set(DK_CM_PARM_RETRIEVE, dkRetrieveOptions);
pparm[2].set(DK_CM_PARM_END,(long) 0);
- 検索を実行します。 検索を実行する方法が 3 つあります。
- evaluate
- すべての結果を集合として戻します。小さなセットの場合に適しています。
- execute
- 呼び出し元が結果に繰り返し使用する、結果のセット・カーソルを戻します。
- executeWithCallback
- 結果のセットに繰り返されるスレッドを作成し、結果のそれぞれのブロック用にコールバック・オブジェクトを
呼び出します。呼び出し元は結果を入手するためにコールバック・オブジェクトを
使用します。
以下の例では、5 つの結果のみが必要です。
よって、DKDatastoreICM.evaluate メソッドが使用されます。
DKResults * resultsCollection = (DKResults *)(dkCollection *)
dsICM->evaluate(queryString,DK_CM_XQPE_QL_TYPE, parms);
- 検索の結果が表示されます。
// Create an iterator to go through Results collection.
dkIterator* iter = resultsCollection->createIterator();
cout << "Results:" << endl;
cout << " - Total: " << results->cardinality() << endl;
while(iter->more())
{
//Each element in the returned array is an item (DDO)
DKDDO* ddo = (DKDDO*) iter->next()->value();
cout << " - Item ID: " << ((DKPidICM*)ddo->getPidObject())
->getItemId() << " (" << ((DKPidICM*)ddo->getPidObject())
->getObjectType() << ")" << endl;
}
- クリーンアップします。
delete(iter);
delete[] parms;
....
完全なサンプルと追加資料については、IBMCMROOT/samples/cpp/icm にある SSearchICMAPI 実習サンプルを参照してください。