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

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

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30