サイト内検索を作らなければ、と思ったわけではない。 しかし、Hyper Estraierのデモを見て、とても早く検索していることに驚いた。 これなら、自分のサイトに導入してみてもいいかもしれない。 作業待ちの時間を利用して、導入してみることにした
参考web http://hyperestraier.sourceforge.net/$ 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 |
$ 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. #================================================================ |
インデックスを作成する場所を決める。どこでもよい。
インデックスを作成するディレクトリに移動し、コマンドを実行する。
結果、実行ディレクトリに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そのものが動くのかも確認が必要かもしれない。
public_html配下には、検索に含めなくて良いディレクトリが存在する。 例えば、cgiなどが思い当たる。
そこで、ガイドに従い、次のようにインデックスを作成することにした。
[est]$ find /home/kenstar/public_html/ -type f -not -path '*/cgi-bin/*' | estcmd gather -il ja -sd casket - |
tdiaryのcacheは使えないが、squeeze.rbで出力しているデータを利用する。
estseek.cgiに下記を追加replace: /tdiary/diary/([0-9]*)/([0-9]*){{!}}/tdiary/\1\2 |
類似検索用インデックスも一緒に作成するシェルを作成し、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 |
マニュアルの通りに設置。文字コードに気をつければ、問題ない。
<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> |
Wikiは、ディレクトリごと検索対象にしてしまうと、余計な部分(設定ファイルや、Wiki本体)もみてしまうし、肝心のWikiページに対するリンクは作成できない。そこで、perlでツールを作成してみた。
設定ファイル(下記iniファイル)に、Wikiのディレクトリを指定する。そこのwikiディレクトリを参照し、ファイル名をencodeしてから一時ファイルを作成して、その内容をHyperEstraierのインデックスに追加してやる。
なお、設定ファイルの扱いを簡単にするため、Config::Simpleが必要。
wiki_he.pl実行方法 wiki_he.pl -f wiki_he.ini |