Hyper Estraier
Hyper Estraierはいわゆる全文検索システムです。
日本人の方が開発したので日本語の検索に対応しており、検索、インデックス作成ともに非常に高速です。
他にもいろいろ特色があるようですが、これまでは私はNamazuを使用していたので、これから使用感を比べてみようと思っています。
インストール
まずはじめに、Hyper EstraierのビルドにはQDBMが必要なので、QDBMを前もってインストールしておきます。
QDBMが用意できたら全文検索システム Hyper Estraierから最新のアーカイブを取得し、展開します。
% gzip -dc hyperestraier-1.4.10.tar.gz | tar xvf - % cd hyperestraier-1.4.10
後はお決まりの手順です。
% ./configure % make % make check % su # make install
検索
Hyper Estraierではコマンドライン上での検索とCGIによる検索については簡単に行うことが出来ます。
それ以外に様々なプログラム言語でのAPIが存在するので、実装方法は様々な選択肢があります。
コマンドライン上での検索
以下のようにして検索します。
index_pathはインデックスのパス、keywordは検索したいキーワードです。
% estcmd search -ic EUC-JP -vu -max 100 index_path keyword
その他主要なオプションは以下の通り。
オプション | 概要 |
---|---|
-ic | コマンドライン上で指定する引数のキャラクタコード。日本語を検索するならたぶん必須 |
-vu | 検索結果の表示形式の指定。これ以外に-v?という指定がいくつかあるので、適宜指定 |
-max | 検索結果の最大数の指定。デフォルトは10。負の数を指定すると無限大 |
CGIによる検索
デフォルトでCGI検索用のモジュールが含まれているので、それを設置して使うととても簡単です。
/usr/local/libexec/estseek.cgiが検索用のCGIなので、これをWeb参照可能な場所に置きます。
次に、/usr/local/share/hyperestraier/locale/jaに検索用CGIで使用する設定ファイルとテンプレートファイル等があるので、これを検索用CGIと同じディレクトリに置きます。
検索用CGIのファイル名は任意です。
例えばsearch.cgiという名前にした場合、設定ファイル名はsearch.confとなります。
※設定ファイル名をsearch.cgiと異なるディレクトリに配置できない。。。。
その他のテンプレートファイル等は設定ファイル内で指定可能です。
以下、主な設定内容です。
項目 | 概要 |
---|---|
indexname | インデックスのpath |
tmplfile | テンプレートファイル名 |
topfile | 検索ページのトップページのテンプレートファイル名 |
helpfile | ヘルプファイル名 |
replace | ファイルpathからURLへの変換ルールを正規表現で設定 |
このようにかなり簡単に検索CGIを設定することが出来ます。
しかしながら、使ってみた感じでは個人的には以下のような問題点があります。
・テンプレートファイルはもちろん編集可能なのだが、あまりきめ細かなカスタマイズはできない。フォーム等をカスタマイズすることはできるが、例えば、検索結果一覧部分のテンプレートは変更できないみたい。基本的にはスタイルシートで変更可能な程度のカスタマイズまで。
・キャラクタコードがUTF-8限定。他のフォームの入力に対してのキャラクターコードの指定は可能だが、検索CGI内ではUTF-8しか使えないみたい。
クローラー
Hyper Estraierではローカルファイルだけでなく、インターネット上のWebページを取得してインデックスを作成することができます。
この時、単に1つのWebページをターゲットとするだけでなく、そのページを解析し、リンクをたどって(クロールして)インデックスを作成するることもできます。
以下、簡単な使い方です。
初期化
まず、クローラー用のディレクトリを初期化します。
path_to_directory はクローラー用のディレクトリ名を指定します。
% estwaver init path_to_dirctory
設定
初期化したディレクトリ下に _conf というファイルが作成されます。
これがクローラーの設定ファイルとなりますので、これを適宜編集します。
以下、主なクローラーの設定項目です。
設定項目 | 概要 |
---|---|
seed: 1.0 | http://lightly.plala.jp/ | クロールの起点となるURLの指定。「|」の前の部分は類似度判定の重み付けとのことですが詳細不明。とりあえずは「1.0」にしておけばいいらしいです。 |
strategy: 2 | クロールする際の方針の指定。0:バランス戦略、1:深さ類似度優先戦略、2:深さ優先戦略、3:幅優先戦略、4:無作為戦略。Webクローラーとして最適なのがバランス戦略。メモリ使用量重視であれば深さ優先戦略 |
allowrx: ^http://lightly.plala.jp/ | クロールするURLを正規表現で指定。クロールするURLを限定したい時に使用 |
denyrx: comment\.pl | クロールしないURLを正規表現で指定。もちろんインデックスにも登録されない |
noidxrx: /\?[a-z]=[a-z](;|$) | クロールするがインデックスには登録しないURLを正規表現で指定 |
language: 1 | 言語を指定。1が日本語 |
threadnum: 1 | 並列実行するスレッドの数を指定。あまり大きいとそれだけメモリを消費するので注意。デフォルトの10ではうちのサーバではkernel panicしました(/_\;) |
revisit: 1d | 再クロールの期間を指定 |
cachesize: 128 | インデックス用キャッシュのサイズをメガバイト単位で指定。実メモリの半分程度が望ましいらしい |
実行
以下のようにするとクロールしてインデックスの作成が行われます。
% estwaver crawl path_to_directory
停止したい場合には Ctrl-C 等で正常に停止できます。
停止するまでに若干時間がかかることがあります。
正常に停止した場合には再度上記のコマンドで再開されます。
なお、-revcontオプションをつけてestwaver crawlを実行すると、既存の文書の再巡回を行ってから、他の文書のクローリングを続行します。
従って、2回目以降は-revcontで実行した方がよいようです。
また、-restartオプションをつけてestwaver crawlを実行すると、クローリングを最初からやり直して、Web上で更新された文書の内容をインデックスに反映させることができます。
検索
初期化したディレクトリ下に _indexというディレクトリが作成されます。
これがクローラーで作成されるインデックスですので、検索はこのインデックスを指定すればestcmdで作成したインデックスと同様に検索することが可能です。