Hyper Estraierは全文検索システムです。たくさんの文書の中から、特定の語句を含むものを探して、該当するものの一覧を表示することができます。Webサイトを運営している方なら、自分のサイト専用の検索エンジンとして利用することができます。メールボックスやファイルサーバを対象とした検索ツールとして利用することもできます。
Hyper Estraierには、次のような特徴があります。
Hyper Estraierは二つの側面を持ちます。一つ目は、全文検索システムを構築するためのライブラリであることです。つまり、プログラマが利用するAPI(Application Programming Interface)を備えています。Hyper EstraierのAPIを利用することにより、全文検索の高度な機能を自分のプログラムに簡単に組み込むことができます。
二つ目は、上述のAPIを使ったアプリケーションであることです。検索用のインデックスを管理するコマンドと、Webインターフェイスで検索を行うためのCGIスクリプトが提供されます。それらを使うことにより、典型的な検索システムならプログラミングをしないで構築することができます。
この文書では、Webサイトの検索機能を題材に、上述のコマンドとCGIスクリプトを使って検索システムを構築する方法を説明します。まずは付属のコマンドとやCGIスクリプトを利用方法を習得してから、それでは実現できない機能が必要ならばAPIを使ったアプリケーションで補うようにするとよいでしょう。Hyper Estraierは豊富な機能を備えていますが、その全ての使い方を覚える必要はありません。Webサイトの検索システムを構築するなら、この文書だけ読めば十分です。
Hyper Estraierのソースパッケージからのインストール方法を説明します。バイナリパッケージのインストール方法についてはそれぞれのパッケージの説明書をご覧ください。
Hyper Estraierの現在バージョンは、UNIX系およびWindows NT系のOSで利用することができます。少なくとも、以下の環境では動作するはずです。
ソースパッケージを用いてHyper Estraierをインストールするには、gcc
のバージョン2.95以降とmake
が必要です。それらはLinuxやFreeBSDには標準的にインストールされています。
Hyper Estraierは、以下のライブラリを利用しています。予めそれらをインストールしておいてください。
なお、QDBMをインストールする際には、zlibを有効化(./configure --enable-zlib
)しておくことをお薦めします。その方がHyper Estraierの作るインデックスが小さくなります。QDBMの1.8.74以前のバージョンはサポートされませんので注意してください。
Hyper Estraierの配布用アーカイブファイルを展開したら、生成されたディレクトリに入ってインストール作業を行います。
configure
スクリプトを実行して、ビルド環境を設定します。
./configure
プログラムをビルドします。
make
プログラムの自己診断テストを行います。
make check
プログラムをインストールします。作業はroot
ユーザで行います。
make install
一連の作業が終ると、以下のファイルがインストールされます。
/usr/local/include/estraier.h /usr/local/include/estmtdb.h /usr/local/include/estnode.h /usr/local/lib/libestraier.a /usr/local/lib/libestraier.so.8.38.0 /usr/local/lib/libestraier.so.8 /usr/local/lib/libestraier.so /usr/local/lib/pkgconfig/hyperestraier.pc /usr/local/bin/estcmd /usr/local/bin/estmttest /usr/local/bin/estmaster /usr/local/bin/estbutler /usr/local/bin/estcall /usr/local/bin/estwaver /usr/local/bin/estload /usr/local/bin/estconfig /usr/local/bin/estwolefind /usr/local/libexec/estseek.cgi /usr/local/libexec/estfraud.cgi /usr/local/libexec/estproxy.cgi /usr/local/libexec/estscout.cgi /usr/local/libexec/estsupt.cgi /usr/local/share/hyperestraier/estseek.conf /usr/local/share/hyperestraier/estseek.tmpl /usr/local/share/hyperestraier/estseek.top /usr/local/share/hyperestraier/estseek.help /usr/local/share/hyperestraier/estfraud.conf /usr/local/share/hyperestraier/estproxy.conf /usr/local/share/hyperestraier/estscout.conf /usr/local/share/hyperestraier/estsupt.conf /usr/local/share/hyperestraier/estresult.dtd /usr/local/share/hyperestraier/estraier.idl /usr/local/share/hyperestraier/locale/... /usr/local/share/hyperestraier/filter/... /usr/local/share/hyperestraier/increm/... /usr/local/share/hyperestraier/doc/... /usr/local/man/man1/... /usr/local/man/man3/...
Mac OS Xの場合、「make
」の代わりに「make mac
」、「make check
」の代わりに「make check-mac
」、「make install
」の代わりに「make install-mac
」を実行してください。なお、Mac OS Xでは共有ライブラリの命名規則が異なります。「libestraier.1.0.0.dylib
」「libestraier.1.dylib
」「libestraier.dylib
」になります。
HP-UXの場合、「make
」の代わりに「make hpux
」、「make check
」の代わりに「make check-hpux
」、「make install
」の代わりに「make install-hpux
」を実行してください。なお、HP-UXでは共有ライブラリの命名規則が異なります。「libestraier.sl
」になります。
Windows上でビルドを行う場合には、CygwinおよびMinGWの開発環境が必要です。また、zlibとlibiconvとQDBMのMinGW版がそれぞれインストールされている必要があります。その上で、「make win
」を実行してください。Windows用のインストールコマンドは用意されていません。Windows版のアプリケーションを動作させるには、「estraier.dll
」だけでなく、「mgwz.dll
」「libiconv-2.dll
」「regex.dll
」「qdbm.dll
」「pthreadGC2.dll
」も必要です。なお、Windows版のバイナリパッケージには必要なライブラリが全て納められていますので、そちらを使うことをお薦めします。
「./configure」を実行する際には、以下のオプションを指定することができます。
MeCabを組み込む場合、MeCabのバージョン0.92以降と、MeCab-IPADICの2.7.0以上を用い、辞書の文字コードはEUC-JP(デフォルト)にしてください。
Webサイトの検索機能を例にとって、検索機能を動作させるための手順を説明します。意外に簡単にできますので、ぜひ実際に設置してみてください。
Hyper Estraierでは、高速な検索を可能にするために、転置インデックスと呼ばれるデータベースを利用します。つまり、検索を行う前に、検索対象の文書を登録した転置インデックスを構築しておく必要があります。以後は転置インデックスのことを単にインデックスと言います。
インデックスを管理するために、estcmd
というコマンドが提供されます。estcmd
はローカルホストのファイルシステム上にある個々のファイルを文書として扱います。インデックスに文書を登録したり、インデックス内の文書情報を削除することができます。また、特定のディレクトリの以下の文書を一括して登録することもできます。対応している文書の形式は、プレーンテキストと、HTMLと電子メール(MIME)です。
その他の形式の文書を扱ったり、リモートホストにあるファイルを扱ったりすることもできるのですが、その方法については後々説明します。
あなたがWebサイトを運営していて、そのコンテンツが「/home/www/public_html
」以下に置いてあるとしましょう。その下にある全てのHTMLファイルを登録したインデックスを「/home/www/casket
」として作成することにします。それには、以下のコマンドを実行します。
cd /home/www estcmd gather -il ja -sd casket /home/www/public_html
「/home/www/public_html
」以下の文書を収集して、casket
という名前のインデックスを作るという意味です。「-il ja
」オプションは、文字コードの判定時に日本語を優先するという意味です。「-sd
」オプションは、ファイルの作成日時と更新日時をインデックスに記録するという意味です。実行すると、進捗状態のログメッセージが出てから、casket
というディレクトリが作成されます。このディレクトリがインデックスです。インデックスの作成に必要な手順はこれだけです。
検索はWebインターフェイスで行います。Webブラウザで検索用ページにアクセスすることで、検索を行います。estseek.cgi
はそのためのCGIスクリプトです。CGIスクリプトを動作させるためのWebサーバの設定については、各サーバのマニュアルをご覧ください。
CGIスクリプトの設置場所のURLが「http://www.estraier.ad.jp/cgi-bin/
」で、そのローカルのパスが「/home/www/cgi-bin
」だとしましょう。その場合、以下のコマンドを実行します。
cd /home/www/cgi-bin/ cp /usr/local/libexec/estseek.cgi . cp /usr/local/share/hyperestraier/estseek.* .
「/usr/local/libexec/estseek.cgi
」と、「/usr/local/share/hyperestraier/
」にあるestseek.conf
とestseek.tmpl
とestseek.top
とestseek.help
を、「/home/www/cgi-bin/
」にコピーするという意味です。estseek.cgi
はCGIスクリプトです。estseek.conf
は設定ファイルです。estseek.tmpl
は検索ページのテンプレートファイルです。estseek.top
は検索ページの初期画面のメッセージを記述したファイルです。estseek.help
は検索機能の簡単な使い方を記述したファイルです。なお、それらを日本語化したものが「/usr/local/share/hyperestraier/locale/ja/
」の下にありますので、そちらを利用してもよいでしょう。
適当なテキストエディタで、設置されたestseek.conf
を開いて編集します。多くの項目はそのままでよいのですが、indexname
とreplace
だけは変更する必要があります。以下のように書きます。
indexname: /home/www/casket ... replace: file:///home/www/public_html/{{!}}http://www.estraier.ad.jp/ ...
indexname
はインデックスのパスを指定します。replace
はローカル用のURIをWebサーバ用のURIに変換する指定です。「{{!}}
」の前後にローカルの接頭辞とWebサーバ用の接頭辞を書きます。
これで準備はOKです。Webブラウザで、「http://www.estraier.ad.jp/cgi-bin/estseek.cgi
」にアクセスしてみてください。詳しい使い方はそのページに書いてあります。
サイト内の文書が更新されたり、新しい文書が追加されたりした場合、適当な頻度でインデックスも更新するとよいでしょう。古いインデックスを削除して新しく作りなおしてもよいのですが、Hyper Estraierではインデックスの差分登録をすることもできます。
インデックスを作る際に「-sd
」オプションをつけてファイルの更新時刻を記録していたのは、差分登録のためです。更新時刻を記録したインデックスに対しては、「-cl
」と「-sd
」と「-cm
」オプションをつけて更新を行うことで、差分登録を行うことができます。
cd /home/www estcmd gather -cl -il ja -sd -cm casket /home/www/public_html
「-cm
」オプションをつけると、まだインデックス内に存在しないか、前に登録した時より更新時刻が新しい文書のみを登録します。なお、既存の文書とURLが同じ文書を登録すると上書きされますので、古い文書は検索にヒットしなくなります。「-cl
」オプションをつけると、上書きされた文書が含んでいた語句のインデックスを再構築します。次に更新をする時のために「-sd
」オプションもつけて更新日時を記録しています。
サイト内の文書が削除された場合も、それをインデックスに反映して検索にヒットしないようにします。以下のコマンドを実行します。
cd /home/www estcmd purge -cl casket
インデックス内の文書情報をスキャンして、元の場所にファイルがないものを削除します。「-cl
」オプションは、削除された文書が含んでいた語句のインデックスを再構築することを指示します。
文書の登録や削除を繰り返すと、少しずつインデックスのサイズが肥大化してきます。データベースを最適化するとそれを解消してサイズを縮小することができます。
cd /home/www estcmd optimize casket
なお、gather
やpurge
を実行する際に「-cl
」をつけなかった場合、上書きまたは削除された文書の情報は、削除マークが付けられるだけでインデックス内に残っています。最適化はインデックスを再構築して削除文書の領域を完全に消去する効果もあります。
コマンドを定期的に実行するcron
などの機能を使ってインデックスの更新作業を自動化すると楽です。その際には、以下のようなスクリプトを書いておくとよいでしょう。
/usr/local/bin/estcmd gather -cl -il ja -sd -cm /home/www/casket /home/www/public_html /usr/local/bin/estcmd purge -cl /home/www/casket
ただし、purge
は毎回の更新で必要なわけではありません。それらは比較的重い処理なので、たまにやるだけで充分です。個人のWebサイトの検索システムであれば、gather
は毎日、purge
は毎週といった頻度にしてもよいでしょう。また、月に一度くらいでoptimize
を行ってもいいでしょう。
コマンドやCGIスクリプトの詳しい使い方に関してはユーザガイドをご覧ください。APIの詳しい使い方に関してはプログラミングガイドをご覧ください。
Hyper Estraierの真価は、そのP2P機構にあります。P2P機構を使わなくても一般的な全文検索システムとして十分に有用だとは思いますが、それに飽きたら、ぜひともP2P機構を使ってみていただきたいと思います。たとえマシンを1台しか持っていなくても、検索と更新が並列に行えたり、複数のインデックスを扱えたり、Atomフィードが配信できたりといった様々な利点が得られます。P2P機構の詳しい使い方に関してはP2Pガイドをご覧ください。
Hyper EstraierにはWebを巡回して文書を集めてくるクローラも付属しています。それを使うと特定のWebサイトや不特定多数のWebサイトを対象としたサーチエンジンを簡単に構築することができます。詳しくはクローラガイドを御覧ください。
作者の連絡先などの補足事項を紹介します。
Hyper Estraierは平林幹雄が作成しました。作者と連絡をとるには、`mikio@fallabs.com
' 宛に電子メールを送ってください。
Hyper Estraierはフリーソフトウェアです。あなたは、Free Software Foundationが公表したGNU Lesser General Public Licenseのバージョン2.1あるいはそれ以降の各バージョンの中からいずれかを選択し、そのバージョンが定める条項に従ってHyper Estraierを再頒布または変更することができます。
Hyper Estraierは有用であると思われますが、頒布にあたっては、市場性及び特定目的適合性についての暗黙の保証を含めて、いかなる保証も行ないません。詳細についてはGNU Lesser General Public Licenseを読んでください。
あなたは、Hyper Estraierと一緒にGNU Lesser General Public Licenseの写しを受け取っているはずです(`COPYING
' ファイルを参照してください)。そうでない場合は、Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA へ連絡してください。
Hyper Estraierは情報処理推進機構(IPA)による2004年度第2回未踏ソフトウェア創造事業の支援を受けて開発されました。同機構の関係各位および鵜飼文敏PMに感謝いたします。また、有用な助言をくれた皆様、そして、Hyper Estraierのユーザの皆様にお礼を申し上げます。