古い記事
ランダムジャンプ
新しい記事
こんばんは。Ajax Tatsuo です。
ところで、Ajax って何て読むんでしょうね。
アジャックス? アヤックス? エージャックス? アイァクス?

さて、Ajax の練習[2005-02-24-3]の続き。

自分の Blog の記事の全テキストを対象に、Google Suggest
<http://www.google.com/webhp?complete=1&hl=en> みたいなことをやっ
てみたいのだが、chalowの検索CGIであるclsearch.cgiは、インデックス
方式ではなくテキスト走査方式(つまりgrep式)なので、Ajax 的にキー
入力のたびに検索するとなるとちょっと遅い。つうか重すぎ。

そこで、今日のところは妥協して、検索キーのヒット数だけを出すような
比較的軽い処理にしようかと。それでもテキスト走査方式だと遅いので、
インデックス方式の検索エンジン SUFARY を CGI から呼び出して使うこ
とに(see 付録)。妥協により本来の目標からだいぶずれて来たが。まあ
ともかく、そんなわけで、「たつをの ChangeLog」を対象にインクリ
メンタルに検索キーのヒット数を表示する Ajax な仕掛け
ができた。

↓まずはお試しあれ。日本語も行けるよ。IE6 & FF で動作確認済。
  (SUFARYはmmapしてるから最初は遅いかも。とりあえず一文字入れて
    数字が出るのを待ってから次の文字入れると良いかと)


これの利点は「そのキーで検索してちゃんと結果が出てくるかが submit
する前に分かっちゃう」こと。メインの検索 CGI (clsearch.cgi) を呼ぶ
回数が減らせる。ヒット数が 0 でないときだけ「search」ボタン(submit)
で本番検索すればいいだけ。clsearch.cgi はヒット数が 0 だと最後まで
走査するので時間がかかるのだ。

付録:
SUFARY を呼び出している CGI。キーを受け取り、それがヒットした数を
返す。SUFARY 付属の検索コマンド sass に、ヒット数だけ返すオプショ
ン (-c) があるので、それを使っただけ。
#!/usr/bin/env perl
use strict;
use Jcode;
my $sass_path = "/usr/local/bin/sass";
my $file_name = "/home/yto/www/clog/cl.txt";
print "Content-Type: text/html;\n\n";
(my $key = shift @ARGV) =~ s/[\"\`]//g; # "
$key = Jcode->new($key, "utf8")->euc if ($key =~ /[\x80-\xff]/);
print `$sass_path -i -c "$key" $file_name`;

追記050226:
「[徳]Ajax で ChangeLog を検索する」
<http://tokuhirom.dnsalias.org/~tokuhirom/cl/2005-02-26-1.html>
では、sary ライブラリを ruby から使って検索してる。私も次のステッ
プとして Perl の SUFARY モジュールを使ったものを作る予定。