レベル: 初級 川瀬 智 (kawases@jp.ibm.com), 情報マネジメント・テクノロジ/ソフトウェア開発研究所, IBM
2006年 9月 19日 IBM WebSphere Information Integrator OmniFind Edition v8.3 (以下、OmniFind)[文献1,2,3]は、イントラネットおよびエクストラネットにおける、Web サイトやその他の広範なコンテンツ・リポジトリーを検索するための、IBMの戦略的業務用検索ソリューションです。製品には、検索対象となるデータソースとの接続・構成を管理するためのwebアプリケーションのほか、OmniFindに取り込んだ情報を検索するためのwebアプリケーションも付属しており、容易に検索システムを構築することが可能です。また、独自の検索アプリケーションを開発する際に必要となるAPI (Search and Indexing API、以下 SIAPI)も公開されており、比較的容易に検索アプリケーションを開発することが可能です。
ここでは、SIAPI を使ったシンプルな検索アプリケーションを紹介し、検索アプリケーションの流れや特徴をご説明します。
第1章:検索アプリケーションの基本シナリオ
第2章:環境の準備
第3章:サンプル・コードを使った検索アプリケーションの実行
第1章:検索アプリケーションの基本シナリオ
まず初めに、検索アプリケーションの基本シナリオとして、API の呼出し手順を説明します。呼び出しの手順は大きく分けて、以下の5つのステップに分けられます。
- ファクトリー・オブジェクト(SearchFactory)の取得
- 検索サービス・オブジェクト(SearchService)の取得
- 検索オブジェクト(Searchable)の取得
- 検索の実行
- 検索結果の表示
では、それぞれのステップを見てみましょう。
STEP1: ファクトリー・オブジェクト(SearchFactory)の取得
まず初めに、検索用のファクトリー・オブジェクトを取得します。OmniFind では、com.ibm.es.api.search.RemoteSearchFactoryを利用することが可能です。
// ファクトリー・オブジェクトの取得
SearchFactory factory =
SiapiSearchImpl.createSearchFactory("com.ibm.es.api.search.RemoteSearchFactory");
|-------10--------20--------30--------40--------50--------60--------70--------80--------9|
|-------- XML error: The previous line is longer than the max of 90 characters ---------|
|
STEP2: 検索サービス・オブジェクト(SearchService)の取得
次に、検索用サービスに接続するためのプロパティ設定を行い、検索サービス・オブジェクトを取得します。ここで最低限必要な情報は、接続先の検索サービスのホスト名およびポート番号です。このほかに、OmniFindの検索サービスが稼働しているWebSphereApplication Server(WAS) にグローバル・セキュリティーを設定しているときは、usernameおよび password というプロパティを指定することでアクセス可能になります。
// 検索サービス・オブジェクトの取得
Properties config = new Properties();
config.setProperty("hostname", “localhost”); // ホスト名のセット
config.setProperty("port", “80”); // ポート番号のセット
config.setProperty("username", “esadmin”); // WAS ユーザーのセット
config.setProperty("password", “password”); // 上記パスワードのセット
SearchService searchService = factory.getSearchService(config);
|
STEP3: 検索オブジェクト(Searchable)の取得
次に、検索オブジェクトを取得します。ここでは、検索サービス・オブジェクトに対して、所定のアプリケーション情報とコレクションIDを与えます。検索サービスは指定された情報を参照し、対応する検索オブジェクトを返します。
// 検索オブジェクトの取得
ApplicationInfo appInfo = factory.createApplicationInfo(“my_application_name”);
Searchable searchable = searchService.getSearchable(appInfo, “my_collection_id”);
|-------10--------20--------30--------40--------50--------60--------70--------80--------9|
|-------- XML error: The previous line is longer than the max of 90 characters ---------|
|
STEP4: 検索の実行
検索オブジェクトが取得できたら、これを使って検索を実行します。検索のための照会文はテキストのまま検索オブジェクトに投げるのではなく、いったん照会オブジェクト(Query)に変換してから検索を実行します。
// 検索の実行
Query query = factory.createQuery(“IBM”);
ResultSet resultSet = searchable.search(query);
|
STEP5: 検索結果の表示
検索結果が取得できたら結果を表示します。通常の web アプリケーションでは、検索結果を10件程度ずつ切り出して、それぞれのタイトルや文書のサマリーを見やすく表示することになりますが、以下の例は文書IDだけをコンソールに出力するシンプルな例です。
// 検索結果の表示
Result[] results = resultSet.getResults();
for (int i=0 ; i<results.length ; i++) {
String uri = results[i].getDocumentID();
System.out.println(uri);
}
|
以上の流れでOmniFind に接続し、検索要求を送って検索結果を取得することができます。
第2章:環境の準備
ここでは、実際に検索アプリケーションを実行するための環境の準備を行います。
サーバー(OmniFind)の準備
まず初めに、OmniFind のサーバーを用意します。以下のサーバー構成情報をあらかじめ確認しておいてください。
| <hostname> | OmniFind サーバーのホスト名 (4ノード構成の場合は検索サーバーのホスト名) | | <portNumber> | 検索サービスの Web サーバー・ポート番号 (通常は 80) | | <colledtionId> | コレクションID | | <applicationName> | アプリケーション名 (デフォルトは Default) |
上記のサーバーにはあらかじめ索引を作成しておき、開発環境から anonymousで接続できように、検索サービスを起動させておいてください。
開発環境の準備
今回は開発環境としてRational Application Developer 6.0 (以下、RAD)を使用します。なお、今回使用するサンプル・コードはシンプルなJava アプリケーションですので、任意の開発環境があれば基本的に実行可能です。
サンプル・コードのビルドに必要なモジュールは siapi.jar とesapi.jar の2つです。これらは、接続先のOmniFindサーバー上にあるものを開発環境の任意のディレクトリにコピーしておきます。バージョンによって挙動が異なる場合がありますので、かならず接続先のサーバーにあるもの(またはそれと同じバージョンのもの)を用意してください。
以上で準備は完了です。
第3章:サンプルを使った検索アプリケーションの実行
上記の準備ができたら、サンプル・コードを開発環境にインポートし、検索アプリケーションを実行してみましょう。
|
1 新規プロジェクトの作成
| | 1.1 | RAD を起動し、「ファイル」→「新規」→「プロジェクト」をクリックします。 | | 1.2 | 「java プロジェクト」を選択し、「次へ」をクリックします。
| | 1.3 | プロジェクト名 (ここでは 「Sample」)を指定して、「終了」をクリックします。 ※ここで、自動的に「java パースペクティブ」に切り替わります。切り替わらない場合は「ウィンドウ」→「パースペクティブを開く」→「java」をクリックします。 | |
2 ライブラリーのインポート
| | 2.1 | java パースペクティブ上のパッケージ・エクスプローラ(ウィンドウ左のペイン)にあるSample プロジェクトを右クリックして、「プロパティ」を選択します。 | | 2.2 | 「java のビルド・パス」から「ライブラリー」タブをクリックし、「外部 JARの追加」をクリックします。 | | 2.3 | 事前に準備しておいた siapi.jar を選択して、「開く」をクリックします。 | | 2.4 | 再度「外部 JAR の追加」をクリックして、esapi.jar も選択します。
| | 2.5 | 「OK」をクリックしてプロパティを閉じます。 | |
3 サンプル・コードのインポートと修正
| | 3.1 | java パースペクティブ上のパッケージ・エクスプローラ(ウィンドウ左のペイン)にあるSample プロジェクト上に、以下のサンプル・コード(MySearchExample.java)をドラッグ&ドロップします。
※ここで、自動的に「(デフォルト・パッケージ)」が生成され、「MySearchExample.java」が取り込まれ、自動的にコンパイルされます。コンパイル・エラーがないことを確認してください。もしエラーが出る場合は、siapi.jarおよび esapi.jar が正しくインポートされているかどうかを確認してください。
| |
4 実行
| | 4.1 | 上記「MySearchExample.java」を右クリックして「実行」→「javaアプリケーション」をクリックします。 | | 4.2 | コンソール(ウィンドウ右下のペイン)に以下のメッセージが出力されることを確認します。 Usage: MySearchExample <照会語> <ホスト名> <ポート番号><コレクションID><アプリケーション名> <WASユーザー名> <WASパスワード>
Example Usage: SearchExample OmniFind myhost 80 col1 Default wasUser wasPassword
※これは、MySearchExample の実行パラメーターが不足しているときに表示されるメッセージです。
| | 4.3 | 今度は、「MySearchExample.java」を右クリックして「実行」→「実行」をクリックします。 | | 4.4 | 「実行」ウィンドウが開くので、「Java アプリケーション」→「MySearchExample」を選択し、「引き数」タブをクリックします。 | | 4.5 | 上記 Usage に表示された引き数を指定します。 例1) こんにちは myHost 80 col_12345 Default null null
例2) "OmniFind WAS DB2" myHost 80 col_12345 Default esadminpassword123
| | 4.6 | 「実行」をクリックします。検索サーバーに接続し、10件までの検索結果が返されることを確認します。 ※検索結果は索引によって変わります。
|
今回は照会語にヒットした文書のトップ10件の文書IDが表示されるようになっています。実際の検索アプリケーションではヒットした文書のタイトルやサマリーが表示されますが、それらの項目を表示させるためのコードの一部は、サンプル・コードのコメントとして埋め込まれています。コメント行をいくつか編集して、文書タイトルの表示や検索結果のソートなどを試してみてください。
ダウンロード | 内容 | ファイル名 | サイズ | ダウンロード形式 |
|---|
| MySearchExample.java | MySearchExample.java | 7.8 KB | HTTP |
|---|
参考文献
著者について  | |  | 川瀬 智は、ソフトウェア開発研究所のプロジェクト・マネージャー兼ソフトウェア・エンジニアで、OmniFind の Lab. Based Service に従事しています。OmniFind に関する多く案件をサポートさせていただいているほか、日本アイ・ビー・エム研修サービス(株)主催の OmniFind セミナーの講師も担当しています。オフでは日本テニス協会の公式ランキング保持者としてオープン大会に参戦しています。 |
記事の評価
|