1. Luceneの概要
Lucene 1章 Luceneの概要
- 1.1. Luceneについて
- 1.2. インデックスの作成
- 1.3. インデックスからの検索
1.1. Luceneについて
LuceneはJakartaプロジェクト1 によって開発された、 100% PureJavaのインデックスを作成するタイプの全文検索エンジンです。 (インデックスとは、高速で検索するためにつけられた索引のことです。) Luceneそのものはライブラリであり完結したプログラムではありませんが、 Luceneが提供するAPIを用いることで、簡単に使いやすい全文検索プログラムを作ることが出来ます。 またJavaで書かれているため、Webアプリケーションへの適応が簡単に行えます。 Lucene自体は日本語を解析することが出来ませんが、形態素解析プログラムを利用することで日本語を検索することも可能になります。 形態素解析とは文字列を品詞毎に分解する技術です。 例えばという文字列に対して形態素解析を行うと「今日は良い天気です」
というように品詞ごとに分解することが出来ます。 文書に含まれる文字列を形態素解析し、単語毎に索引をつけることで、 どの単語がどの文章にいくつ含まれるか、どの場所に含まれるかといった情報をインデックスにすることができます。 また検索に必要の無い(例えば「です」「ます」などの助動詞など)単語を除外することで、インデックスのサイズを小さく保つことが出来ます。 問題点として、辞書に登録されていない単語を認識できないので、Luceneでインデックスをつけることができず検索できないという点が挙げられます。「今日」「は」「良い」「天気」「です」
Luceneで利用出来る日本語の形態素解析プログラムにはSenがあります。 senではIPADICというフリーの辞書情報を使用していますが、専門用語など特殊な単語は辞書に登録されていないことがあります。 もしそれらの単語を検索したい場合は、独自の辞書を作成する必要があります。
またLuceneではsenを利用したJapaneseAnalyzer以外にCJKAnalyzerと呼ばれるAnalyzerを使用することも出来ます。 CJKAnalyzerは文字列を二文字づつ分解し、インデックスに登録します。 例えば
という文字列だと「今日は良い天気です」
「今日」「日は」「は良」「良い」「い天」「天気」「気で」「です」
のように分解されて、インデックスに登録されます。 CJKAnalyzerを使用すると、JapaneseAnalyzerでの問題点である検索漏れは少なくなりますが、検索結果にノイズが発生する可能性が高くなります。 また一文字の言葉を見つけることが出来ないという問題点もあります。
Lucene+JapaneseAnalyzerで全文検索プログラムを作るには以下のファイルが必要です。
- Apache Ant
- Perl
- Lucene-ja
- sen
senのインストール
Java.net よりsen-*.*.zip(*.*はバージョンが入ります。)をダウンロードし、 適当なディレクトリ(仮にc:\senとする)にインストールしたのちに辞書を作成します。 辞書の作成にはPerlが必要なのでcygwinやActivePerlをインストールしてください。以下のコマンドを実行します。c:\sen\dic> ant -Dperl.bin=[Perlのインストール先]\perl.exe辞書はNAISTで配布しているIPADICが、上記コマンドにより自動的にダウンロードされます。
Luceneのインストール
senと共にLuceneも配布されています。 java.net よりlucene-ja-*.*.*sen*.*.zip(にバージョンが入ります。現時点での最新版はlucene-ja-1.4.3sen1.2-2.zipです。)をダウンロードし、 適当なディレクトリ(仮にC:\lucene-jaとする)に展開、インストールします。 lucene-jaにはLuceneが含まれているのでJakarta LuceneよりLuceneをダウンロードする必要はありません。1 [2012/5/23追記] 2011/12/21にてJakarta Projectは廃止されました。このプロジェクトはApache Projectに移管済みです