今度こそこのページにも検索機能をつけるかと思って、今回は Hyper Estraierに挑戦してみることにしました。ちなみに Googleの検索ボックスも試してみたんですが、どうもここのサイトはすべてのページがクロールされていないようなのであえなく却下。rastも前回試したときからバージョンが新しくなっていたのでちょっとやってみたのですが、今度はコンパイルすら通らなくなってしまって前回より退化していたのでこれもあきらめました。
レンタルサーバへのインストールなので環境の制約が多く結構苦労しましたが、なんとか動くようになったので作業内容を以下にまとめておきます。なお OSは FreeBSD 4.8-RELEASE-p29です。
QDBMのインストール
Hyper Estraierのインストールの前に QDBMをインストールする必要があります。
QDBM: Quick Database Manager
http://qdbm.sourceforge.net/index.ja.html
からソースをダウンロードしてコンパイルします。
$ ./configure --prefix=/home/fumi/local
$ gmake
$ gmake install
自分は $HOME/local配下にインストールしました($HOME=/home/fumi)。
Hyper Estraierのインストール
Hyper Estraier: a full-text search system for communities
http://hyperestraier.sourceforge.net/index.ja.html
からソースをダウンロードしてきます。まず configure。
% ./configure --prefix=/home/fumi/local
QDBMのライブラリがリンクできないと言われたので環境変数 LDFLAGSを設定。
% export LDFLAGS=-L/home/fumi/local/lib (zshの場合。他のシェルは適当に読み替えて下さい)
さらにgnome-config : not foundと言われたので PKG_CONFIG_PATHを設定。
% export PKG_CONFIG_PATH=/home/fumi/local/lib/pkgconfig
これで無事に configureが通りました。このあとは普通に gmake;gmake installでインストールできました。
検索用 HTMLファイルの生成
tDiaryの標準プラグイン squeeze.rbを使って、検索用の静的な HTMLファイルを生成します。squeeze.rbの詳しい説明は
http://ponx.s5.xrea.com/hiki/ja/hiki.cgi?squeeze.rb
にあります。プラグインを有効にすれば、以降のデータは静的な HTMLファイルを生成してくれますが、過去のデータはなんらかの手法で変換しなくてはなりません。
変換には squeeze.rbを CGIで動作させる方式とコマンドラインから動作させる方式があって、最初 CGIで動作させる方でやってみたのですが、Syntax Errorが出て動かないので、CVSから最新の squeeze.rbを取得してくる必要がありました(確かに最新版では Syntax Errorが rescueされてますね)。さらに CGI版では一度に大量のデータを変換することができないようなので、一時的にデータ格納ディレクトリをリネームして(mv 2003 x2003とか)データを少なくごまかして、すこしずつ小分けにして実行しました。
もちろんコマンドラインならこんな制約ないだろうと思ってそっちもやってみましたが、こっちはこっちで Insecure Errorになってしまい、回避方法がよくわからなかったのであきらめました。
あ、書き忘れましたが tdiary.confに以下のオプションを付け足す必要があります。
[ruby]
@options[‘squeeze.compat_path’] = true
@options[‘squeeze.suffix’] = ‘.html’
[/ruby]
HTMLの出力形式を cache/html/20051225.htmlの形式にするためです。
インデックスの作成
検索用インデックスを作成します。
% ~/local/bin/estcmd gather -il ja -sd $HOME/diary/casket $HOME/diary/cache/html
casketが作成先、最後の引数が作成対象のディレクトリです。
Hyper Estraierの設定
設置ディレクトリに必要なファイルをコピーします。
[shell]
$ cd dest_dir
$ cp /home/fumi/local/libexec/estseek.cgi .
$ cp /home/fumi/local/share/hyperestraier/estseek.* .
[/shell]
estseek.confの indexnameと replaceを修正します。
indexname: /home/fumi/diary/casket
replace: file:///home/fumi/diary/cache/html{{!}}http://graphite.que.jp/d/
replace内で後方参照が使えれば前述の tdiary.confの修正は必要なさそうですが、使えないようなのでとりあえずこれでいきます(というか最初はそれでできないか悪戦苦闘してしまった)。
estseek.cgiを実行してみる
ブラウザで estseek.cgiを実行してみます。自分はここで libqdbm.soが見つかんないと怒られました。確かに Webサーバの実行ユーザはこいつの場所を知らないかも。LD_LIBRARY_PATHも見てくれてなさげだったので、しょうがなく estseek.cgiを以下のように書き換えました。
#!/bin/sh
LD_LIBRARY_PATH=/home/fumi/local/lib
export LD_LIBRARY_PATH
/home/fumi/estraier/estseek.out
estseek.outがもともとの estseek.cgiです。これでようやく動くようになりました。
フォームの設置
フォームはこんな感じで設置しました。
<form action="../estraier/estseek.cgi" method="get">
<input name="phrase" size="20" type="text" />
<input type="submit" value="Search" />
<input name="enc" type="hidden" value="EUC-JP" /> </form>
以上です。