 |

|
JBoss EAP+Luceneによる全文検索システム |
第2回:検索プログラムを試してみよう!
著者:ロンウイット 関口 宏司 2007/11/1
|
|
|
1 2 3 次のページ
|
 |
Yahoo!オークションの商品検索プログラム
|
本連載ではJBoss Enterprise Middlewareを使った「エンタープライズレベルの検索サービス」を提供するWebアプリケーションの作成を行う。検索エンジンとしてオープンソースソフトウェア(以下、OSS)のApache Lucene(以下、Lucene:ルシーン)を使用する。
前回「第1回:OSS検索エンジンLuceneとは」では、検索エンジンLuceneについて詳しく解説した。今回はいよいよ実際の検索プログラムを作成していく。
ここでは簡単なサンプルプログラムとするため、JBoss Enterprise Application Platform(以下、JBoss EAP)のJBoss Application Server上で動作するJSPプログラムを作成する。JBoss EAPのインストールについては以下記事を参照していただきたい。
また、検索プログラムの動作確認のために必要となるテキストデータは、「Yahoo!オークション」に出品されている商品データを使用する。なお、本連載ではプログラムのソースコードの一部を取り上げながら解説していくが、完全なプログラムは以下のWebサイトからダウンロードできる。
ダウンロードしたZIPファイルには検索プログラムの動作確認ができるように、数件の商品データサンプルが含まれている。使い方はZIPファイルの中にある「readme.txt」を参照していただきたい。
ファイルサイズの問題があるため、ZIPファイルには商品データを数件しか入れていないが、Yahoo!オークションには常時1千数百万件もの商品が出品されているようだ。
Yahoo!オークションの商品データは、Yahoo!デベロッパーネットワークで提供されているWebサービスを使って取得することができる。時間とディスク容量に余裕のある方は、商品データを取得するクローラ(インターネットなどから情報収集するプログラムのこと。ロボットなどとも呼ばれる)を書いて大量の商品データを収集し、Luceneのインデックスに登録することもできるので、挑戦してみてもよいだろう。
|
Luceneの基本クラス
|
Luceneのプログラムで使用される基本クラスを表1に示す。
役割 |
クラス名 |
概要 |
テキスト文字列の分析 |
Analyzer |
テキスト文字列から「単語」を切り出すためにLuceneフレームワークから呼び出される。 |
インデックスの作成 |
IndexWriter |
addDocument()メソッドでインデックスに文書を追加する。 |
Document |
文書を表現するクラス。文書を構成するフィールドをadd()メソッドで追加する。 |
Field |
フィールド。Ducumentの構成要素。 |
検索 |
QueryParser |
検索式の文字列を解析してQueryオブジェクトを生成する。 |
Query |
検索質問を表す抽象クラス。 |
IndexSearcher |
search()メソッドにQueryを渡して検索を実行し、Hitsのオブジェクトを得る。 |
Hits |
検索結果のオブジェクトで、Documentとそのスコアのペアのリストを保持する。 |
表1:基本クラス
|
インデックスの作成プログラム
|
商品データをLuceneのインデックスに登録するプログラムは次のようになる。
final String INDEX = // インデックスへのパス
IndexWriter writer = new IndexWriter( INDEX,
new CJKAnalyzer() );
// 登録する商品の分だけループする
while( … ){
// 1つのDocumentで1つの商品を表す
Document doc = new Document();
// 商品を表すフィールド分だけ以下の行を繰り返す
doc.add( new Field( … ) );
// 商品をインデックスに登録する
writer.addDocument( doc );
}
writer.close();
商品情報をインデックスに登録(索引付け)するには、最初にIndexWriterのオブジェクトを取得してインデックスを書き込みオープンにする必要がある。それには、インデックスへのパス情報と使用するAnalyzerを指定してIndexWriterのコンストラクタを呼び出せばよい。そして、検索対象となる文書(ここでは商品データ)であるDocumentオブジェクトをIndexWriterのaddDocument()メソッドでインデックスに追加する。
この処理を商品の数だけ繰り返してインデックスに登録していくのである。なお、商品データをDocumentで表現する際に、商品データの属性(商品名、価格、説明など)は、それぞれのFieldオブジェクトを作成してDocumentにadd()メソッドで追加していく。
|
1 2 3 次のページ
|

|
|
|
|
|