JBoss EAP+Luceneによる全文検索システム 1

OSS検索エンジンLuceneとは

JBossとLuceneを使った検索システムを作る「JBoss Enterprise Application Platformの全貌」では全4回にわたって、JBoss Enterprise Middleware全般について解説している。

関口 宏司

2007年10月25日 20:00

JBossとLuceneを使った検索システムを作る

JBoss Enterprise Application Platformの全貌」では全4回にわたって、JBoss Enterprise Middleware全般について解説している。

本連載ではJBoss Enterprise Middlewareを使った具体例として「エンタープライズレベルの検索サービス」を提供するWebアプリケーションを取り上げ、試作する。なお、検索 エンジンにはオープンソースソフトウェア(以下、OSS)のApache Lucene(以下、Lucene:ルシーン)を使用する。


ここで述べる「エンタープライズレベルの検索(注1)」サービスとは、企業が保有する大量のコンテンツを高速に検索するサービスのこととする。 Luceneは小規模(文書数が数万件以下)から大規模(数百万件以上)のコンテンツを高速に検索することを得意としているため、「エンタープライズレベ ルの検索」に適しているといえる。

また、企業が提供するサービスが「エンタープライズレベル」であるためにはサポートサービスなど、運用面の配慮が必須である。この点については、 レッドハット社がJBoss Enterprise Application Platform(以下、JBoss EAP)の有償保守サービスを提供している(詳しくは「第1回:Red Hatが提供するJBoss Enterprise Middlewareとは」を参照のこと)。

またLuceneについては、筆者が属するロンウイット社が有償保守サービスを提供している。両社の組み合わせにより、エンタープライズレベルの検索システムをJBossとLuceneを使って低コストで実現できるのだ。

※注1: なお、似たような言葉で「エンタープライズサーチ(企業内検索)」があるが、アクセス権限や各 種文書フィルタ(PDFやWordファイルからテキストを取り出す機能)について考慮する必要があり、範囲が広くなってしまうため今回は取り上げない。し かし、JBossとLuceneでエンタープライズサーチ・システムの作成は可能である。

全文検索とLuceneのおさらい

検索Webアプリケーションの作成に進む前に、まず全文検索とLuceneについて簡単に説明しておきたい。

全文検索と転置索引(インデックス)

全文検索とは、検索対象となる1つ以上の文書に含まれるテキスト全文を対象として、指定された検索文字列(検索式ともいう)で検索を行い、検索文字列が含まれる文書を表示する機能やシステムのことである。

全文検索の身近な例として、UNIXシステムのgrepコマンドがあげられる。例えば、以下のようなgrepコマンドを実行すると、「throws」という文字列が含まれるJavaソースファイル名と含む行を表示させることができる。これをここでは「grep方式」と呼ぶ。

$ grep throws *.java

「grep方式」は検索実行のたびに検索対象の文書を読み込んで検索するため、文書が大量にある場合には検索時間がかかるという難点がある。リレー ショナルデータベースのlike検索もこの「grep方式」に相当する。これらの点から「grep方式」は大量コンテンツを検索する大規模システムには適さないといえる。

そこで、大規模システムで使用される全文検索システムでは、検索処理を開始する前にあらかじめ転置索引というものを作成している。そして、検索時に 転置索引を使用して検索を行う。転置索引とは、図1のように検索対象となる文書を単語に分割して整理した表のことである。

転置索引の例
図1:転置索引の例

そして検索実行時には検索文字列を同じく単語に分割し、得られた単語で転置索引の表を引くことによって、すばやくその単語を含む文書を示すことができる。これをここでは「転置索引方式」と呼ぶ。

「転置索引方式」は大規模システムの検索に向く反面、「grep方式」と異なり「転置索引をメンテナンスしなければならない」という課題を新たに抱え込むこととなる。例えば、検索対象となる文書が新規追加されたり、削除されたり、または文書内容が変更されたりした場合は、それに合わせて転置索引を更 新する必要がある。

Luceneとは

Luceneは、Apache Software Foundationのもとで開発が進められているOSSの全文検索ライブラリである。LuceneはJavaで書かれており、Javaのプログラムから はLuceneのAPIを呼び出すことで全文検索の機能を利用できる。Luceneでは「転置索引方式」を採用しており、数百万件超の文書を高速に検索することが可能である。

この記事をシェアしてください

人気記事トップ10

人気記事ランキングをもっと見る