Ajax でインクリメンタルにヒット数を表示
2005-02-25-1
[Ajax][Programming]
こんばんは。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) があるので、それを使っただけ。
追記050226:
「[徳]Ajax で ChangeLog を検索する」
<http://tokuhirom.dnsalias.org/~tokuhirom/cl/2005-02-26-1.html>
では、sary ライブラリを ruby から使って検索してる。私も次のステッ
プとして Perl の SUFARY モジュールを使ったものを作る予定。
ところで、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 モジュールを使ったものを作る予定。