あるとわかっているのに辿りつけないもどかしさというか、
google 検索結果返す 故にエントリ有り
というようなgoogle認識論的なアプローチに依存しすぎるということはちょっとツライことに気付いた。
ちゅうのは、自サイトの検索をgoogleに任せてからそこそこ経つんだけど、googleは被リンク数が少ないと(クローラーはガッツリ持ってくくせに)検索結果の表示対象にならない。そのため、自分で書いたエントリがあるはずなのに探せないという状況が頻発した。
なんで、やっぱ自前で検索エンジン入れる必要があるなぁと、Hyper Estraierを利用して検索できるようにした。
僕のサイトはblosxomで構築されている。これは、データベースでなく普通のテキストファイルでエントリを管理しているので、Hyper Estraierのestcmdでデータディレクトリを検索対象にすればよい。ただし、これだと、タイトル属性がないために、検索結果のタイトルがファイル名になってしまう。
blosxomのエントリデータは先頭行がタイトルのテキストデータなので、ここら辺をちょっといじくるblosxom用のフィルタを作成した。
まずは、フィルタを作成。/usr/local/share/hyperestraier/filterのestfxpdftohtmlをコピーしてフィルタを作成。下はdiffってみたけど、要するにpdftotextのコマンドをblosxom用のコンバートコマンドに書き換えれば良いだけ。僕の使っているestfxblosxomtohtml。
--- estfxpdftohtml 2006-12-02 16:09:34.000000000 +0900 +++ estfxblosxomtohtml 2006-12-02 17:47:04.000000000 +0900 @@ -1,14 +1,14 @@ #! /bin/sh #================================================================ -# extfxpdftohtml +# extfxblosxomtohtml # Convert PDF into HTML #================================================================ # set variables PATH="$PATH:/usr/local/bin:$HOME/bin:." ; export PATH -progname="estfxpdftohtml" +progname="estfxblosxomtohtml" # check arguments @@ -56,7 +56,7 @@ # output the result -pdftotext -enc UTF-8 -htmlmeta "$infile" - 2> "/dev/null" | output +bldata2html "$infile" - 2> "/dev/null" | output # exit normally
で、blosxomのデータをhtmlに吐くには先頭行だけtitle属性で囲んで、あとはそのまま出力すればいいんだけど、僕はmarkdown使っているので、フィルタリングしてhtmlに出力するようなスクリプトにした。これがpdftotxtにあたるbldata2htmlで/usr/local/binとかのパスの通ったところに保存する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #!/usr/bin/perl use strict; use warnings; use FileHandle; use Text::Markdown 'markdown'; my $filename = shift; my ($title,$body) = (); my $fh = new FileHandle($filename); $title = <$fh>; chomp($title); { local $/ = undef; $body = <$fh>; } my $html = markdown($body); print "<title>", $title , "</title>\n", $html; |
あとは、実際にインデックスをつくる。txt属性はestfxblosxomtohtmlフィルタをかますようにオプションを指定しておく。最後のextkeysは検索速度向上のため。
PATH=$PATH:/usr/local/share/hyperestraier/filter ; export PATH estcmd gather -il ja -fx ".txt" "H@estfxblosxomtohtml" -sd casket /var/blosxom/data/ estcmd extkeys casket
で、実際にestseekで検索するといい感じ。後は定期的にインデックスの更新するようにしとけば、自サイトの検索はOK。今のとこ、cronでインデックスの更新するようにしていないので、blosomの検索フォームはgoogleのままだけど、そのうち変更しよう。
あとは、blosxomのエントリに類似エントリ検索をした結果を表示するプラグインを作っておけば便利かな。