Hyper Estraierの設置


  1. はじめに
  2. QDBMの導入
  3. Hyper Estraierの導入
  4. 全文検索用インデックス作成・CGIの設置
  5. その他

1. はじめに

サイト内検索を作らなければ、と思ったわけではない。 しかし、Hyper Estraierのデモを見て、とても早く検索していることに驚いた。 これなら、自分のサイトに導入してみてもいいかもしれない。 作業待ちの時間を利用して、導入してみることにした

参考web http://hyperestraier.sourceforge.net/

2. QDBMの導入

Hyper Estraierにはいくつかの前提があり、 必要ファイルセットが一つ足りなかったので導入する。
$ wget http://qdbm.sourceforge.net/qdbm-1.8.74.tar.gz

$ ./configure --enable-zllib
$ cd qdbm-1.8.74
[qdbm-1.8.74]$ ./configure
...(省略)
#================================================================
# Ready to make.
#================================================================

[qdbm-1.8.74]$ make
....(省略)
#================================================================
# Ready to install.
#================================================================

[qdbm-1.8.74]$ sudo make install
特に迷うこともなく、導入終了。

3. Hyper Estraierの導入

ファイルをダウンロードしてきてコンパイルを行う。特に迷うところはない。
$ wget http://hyperestraier.sourceforge.net/hyperestraier-1.4.9.ta
$ tar -zxvf hyperestraier-1.4.9.tar.gz
$ cd hyperestraier-1.4.9
[hyperestraier-1.4.9]$ ./configure
...(省略)
#================================================================
# Ready to make.
#================================================================
[hyperestraier-1.4.9]$ make
....(省略)
#================================================================
# Ready to install.
#================================================================

[hyperestraier-1.4.9]$ make check
#================================================================
# Checking completed.
#================================================================

[hyperestraier-1.4.9]$ sudo make install
#================================================================
# Thanks for using Hyper Estraier.
#================================================================

4. 全文検索用インデックス作成・CGIの設置

インデックスを作成する場所を決める。どこでもよい。
インデックスを作成するディレクトリに移動し、コマンドを実行する。
結果、実行ディレクトリにcasketというディレクトリが作成され、インデックスが格納されている。
不要になれば、このインデックスをディレクトリごと削除すればよい。

$ mkdir est
$ cd est
[est]$ estcmd gather -il ja -sd casket /home/www/public_html/
...(省略)
estcmd: INFO: finished successfully: elapsed time: 0h 7m 5s

CGIを格納するディレクトリを決め、ディレクトリを作成する。

[est]$ mkdir cgi
[est]$ cd cgi
[cgi]$ cp /usr/local/libexec/estseek.cgi .
[cgi]$ cp /usr/local/share/hyperestraier/estseek.* .
[cgi]$ ls
./  ../  estseek.cgi  estseek.conf  estseek.help  estseek.tmpl  estseek.top

設定ファイルを編集し、先ほど作成したインデックスを参照するようにする。

[cgi]$ vi estseek.conf
...(省略)
[cgi]$ diff estseek.conf /usr/local/share/hyperestraier/estseek.conf
1c1
< indexname: /home/kenstar/est/casket
---
> indexname: casket
13c13
< replace: ^file:///home/kenstar/public_html/{{!}}http://localhost/
< replace: /tdiary/diary/([0-9]*)/([0-9]*){{!}}/tdiary/\1\2
< replace: /index\.html?${{!}}/
---
> replace: ^file:///home/mikio/public_html/{{!}}http://localhost/

Apacheの設定を行い、estseek.cgiが実行されるようにする。cgiで検索されるようになっていればよい。

うまくいかない場合は、ディレクトリの指定や権限などを疑う必要がある。また、CGIそのものが動くのかも確認が必要かもしれない。


5. その他の設定

a. index作成対象の絞込

public_html配下には、検索に含めなくて良いディレクトリが存在する。 例えば、cgiなどが思い当たる。

そこで、ガイドに従い、次のようにインデックスを作成することにした。

[est]$ find /home/kenstar/public_html/ -type f -not -path '*/cgi-bin/*' | estcmd gather -il ja -sd casket -

b. tdiary用アドレスのカスタマイズ

tdiaryのcacheは使えないが、squeeze.rbで出力しているデータを利用する。

estseek.cgiに下記を追加
replace: /tdiary/diary/([0-9]*)/([0-9]*){{!}}/tdiary/\1\2

c. 定期的なジョブ

類似検索用インデックスも一緒に作成するシェルを作成し、cronで毎日夜中に流すようにする。

作成したシェル
 cd /home/kenstar/est
 find /home/kenstar/public_html/ -type f -not -path '*/cgi-bin/*'| estcmd gather -cl -il ja -sd -cm casket
 estcmd purge -cl casket
 estcmd words -dfdb mydfdb casket
 estcmd extkeys casket

d. 検索窓を設置

マニュアルの通りに設置。文字コードに気をつければ、問題ない。

<form method="get" action="/est/cgi/estseek.cgi">
<div>
<input type="text" name="phrase" value="" size="32" />
<input type="submit" value="Search" />
<input type="hidden" name="enc" value="EUC-JP" />
</div>
</form>

e. Wikiページの取り込み

Wikiは、ディレクトリごと検索対象にしてしまうと、余計な部分(設定ファイルや、Wiki本体)もみてしまうし、肝心のWikiページに対するリンクは作成できない。そこで、perlでツールを作成してみた。

設定ファイル(下記iniファイル)に、Wikiのディレクトリを指定する。そこのwikiディレクトリを参照し、ファイル名をencodeしてから一時ファイルを作成して、その内容をHyperEstraierのインデックスに追加してやる。

なお、設定ファイルの扱いを簡単にするため、Config::Simpleが必要。

wiki_he.pl
wiki_he.ini
実行方法 wiki_he.pl -f wiki_he.ini

Honkusa Keshi kenstarkenstar.org