[E20] Oracle UCM GET_SEARCH_RESULTS service with full text search

UCMドキュメントの全文検索が可能なポートレットを作成し、RidcやCIS APIの検証をしていました。例えば引用符は、うまく使わないと、たいていの状況ではUCMは例外を投げる、といった感じでいくつか気をつけておくべき項目があります。検証期間中に全文検索が問題なく動作する解決策を作成することができたので共有したいと思います。
final IdcClientManager idcManager = new IdcClientManager();
final IdcClient idcClient = idcManager.createClient("idc://127.0.0.1:4444");
final IdcContext idcContext = new IdcContext("sysadmin");

final DataBinder binder = idcClient.createBinder();
// populate the binder with the parameters
binder.putLocal ("IdcService", "GET_SEARCH_RESULTS");
binder.putLocal ("QueryText", "dDocFullText <substring> <qsch>"+yourSearchWordOrWords+"</qsch>"); 
binder.putLocal ("SearchEngineName", "databasefulltext");
binder.putLocal ("ResultCount", "20");
// execute the request
ServiceResponse response = idcClient.sendRequest (idcContext, binder);
// get the binder
DataBinder serverBinder = response.getResponseAsBinder ();
DataResultSet resultSet = serverBinder.getResultSet ("SearchResults");
// loop over the results
for (DataObject dataObject : resultSet.getRows ()) {
System.out.println ("Title is: " + dataObject.get ("dDocTitle"));
System.out.println ("Author is: " + dataObject.get ("dDocAuthor"));
}

全文検索を宣言する行以外で特別なものはありません。全文検索を使えるようにするためには、検索クエリのdDocFullTextという属性を使う必要があります。<substring>タグは'like'と同じです。また、問題となるかもしれない検索文字列や単語を引用符で囲む必要があるので、<qsch>タグを使いました。このタグを使うと、コードが壊れたり解析の例外が発生せずに引用符を検索文字列中に入れることができます。
サンプルをテストするには、UCM内でテキスト全文検索が可能である必要があります。 以下のURLを参考にして全文検索を可能にした上で、UCMのドキュメントのインデックスを再構成してください。

UCM: Enabling full text search

より具体的に全文検索を交換したいと思うなら、Kyleのエントリが参考になると思います。UCMクエリを定義する方法についての非常に良い内容です。
Getting the Query Syntax for a Search in UCM

0 件のコメント:

コメントを投稿