homeホームHTMLに役立つヒント> WASearch2導入記

WASearch2導入記

 これは鷲崎 弘宜さんの開発した全文検索システム、WASearch2導入記です。作者の鷲崎 弘宜さんに感謝いたします。この文章はバージョン2.22を対象にしています。

 こちらでテスト中です。「検索テスト」も参照してください。

[このページの改定日: 05/06/23 17:58]  あなたはここへ来た、 13593番目の人です。(2001/8/8から)


■■ 目次 ■■


■msearchの特徴 ▲ページトップ

 WASearchはgrepタイプです。とほほさんのwwwsrchと同じタイプですね。
 各ページのスコアによるランク付け、ソーティング、カテゴリー(分野)の指定ができる、といった数々の特徴があります。
 僕が特に惹かれたのはランク付けができるという点です。どうやっているんだろう?

 なお、検索対象のファイルはSJISである必要があります。cgiもSJISで書かれていました。僕のコンパクトカメラデータファイル(これが検索対象ファイルです。例によって)はすべてeucで作られているので、eucファイルを対象とするように改造する必要があります。


■ファイルのダウンロード ▲ページトップ

WASearch v2.2.2からwasearch2.lzhをダウンロードしてきます。
 最初見たとき、「wasearch2.lzh」がバージョン2.1を表しているように見えてしまった(^_^) 1じゃないよlだよーん(^^;


■設定とインストール ▲ページトップ


■検索した感想 ▲ページトップ

 僕の最大の興味はスコア付けです。

キーワード:性能表
絞り込み検索:すべての単語を含む
カテゴリ:キヤノン

 という条件で検索してみました。
 score:5となったAUTOBOY F XLは本文に「性能表」という言葉が5つ入っていました(タイトルを含めると6つある)。
 score:2のAUTOBOY Fは本文中には「性能表」という言葉は1つだけ(タイトルには1つある)。
 そのほかはscore:1となり、本文中には「性能表」という言葉はなくタイトルには1つでした。
 つまり、そのファイルに何回キーワードがでてくるかカウントして、これをスコアにしているように見えます。

 わからないのがscore:5となったAUTOBOY F XLです。score:6とならないといけないと思うのですが(本文5+タイトル1)、そうなっていません。本文中にでてくる「性能表」という言葉のうち、1つだけはリンクになっています。もしかしたらこれが原因かもしれません。

 ソースを覗いてみると、やはり何回キーワードの言葉がでてくるかカウントしているようです。

 当たり前ですが、カテゴリを絞って検索するとスピードは速くなります。
 また、検索するキーワードが増えると、スピードは遅くなります。
 これらはgrepタイプということから容易に想像できる結果で、順当なものです。

 英数字の場合、全角・半角の区別をします。「Nikon」と「Nikon」では検索結果に違いがでるということです。


まとめ

 カテゴリの設定に手間がかかりますが、カテゴリを指定して検索する場合は、これが威力を発揮して、全体からの検索よりも相当高速です。何せ覗いて回るファイル数が激減しますから。

 ナンバリングが最初からサポートされているのは嬉しいです。
 検索結果で、該当キーワード部分が表示され、キーワードに着色されるのはいいですね。

 設定に不明な部分があるので、もう少し詳しい説明書がほしいところです。が、設定自体は難しいことはなく(ディレクトリ数が多いと面倒ですが)、パーミッションの設定さえ間違えなければあっさり設置できるはずです。

 カテゴリに分けた検索をよく使いそうな人、ランク表示のほしい人にお勧めです。


■改造メモ ▲ページトップ

●テストに使ったWASearchの改造箇所のメモです。例によって下のメモはオウンリスクでお願いします。くれぐれも作者の鷲崎 弘宜さんにこのメモについての質問など、ご迷惑のかかることはしないで下さい。

  1. CPU消費時間の表示。※改造済み。下記参照
     この機能は別に他の人は必要ないでしょう。僕の場合、他のサーチエンジンと比較したいのでつけたいわけです。
     
  2. 対象ファイルをeucにする。※改造済み。下記参照
     簡単な改造で済みます。

■改造例 ▲ページトップ

 赤い部分が改造した部分です。

●CPU消費時間を追加。

 次の2箇所を改造し、サブルーチンを一つ追加します。

●オリジナル 一番最初

#!/usr/local/bin/perl

●改造後

#!/usr/local/bin/perl
### 計算時間測定開始・水沢
### スクリプトの頭の方に書く・水沢
$CPU_start = (times)[0] ;#・水沢

●オリジナル 261行目付近

# 出力するHTMLファイルの最後の表示サブルーチン
sub last_html {
  print <<EOF;
<hr>
<p><a href=$backhome>戻る</a></p>
</body>
</html>
EOF
}

●改造後

# 出力するHTMLファイルの最後の表示サブルーチン
sub last_html {
  print <<EOF;
<hr>
<p><a href=$backhome>戻る</a></p>
<!--■水沢改造</body></html>■-->
EOF
### 計算時間測定終了### スクリプトのHTML出力部分に書く
        $CPU_end = (times)[0];
        printf("<DIV align=right>消費時間: %.3f CPU秒</DIV>\n",$CPU_end-$CPU_start);
        printf("</body></html>");
 # 水沢改造
}

●対象ファイルをeucに

 次のように改造しましたが、これで大丈夫という保証はないです。「検索テスト」を見る限りでは無事に動くようです。
 なお、wasearch2.cgi、jcode.plともeucで保存し直してください(配布状態では両方SJIS)。

●オリジナル 46行目付近

foreach $pair (@pairs) {
    ($name,$value) = split(/=/,$pair);
    $value =~ tr/+/ /;
    $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
    &jcode'convert(*value,'sjis'); 
    if ($name eq 'word') { $str = $value; $value =~ s/(\W)/\\$1/g; }
    $cgi{$name} = $value;
}

●改造後

foreach $pair (@pairs) {
    ($name,$value) = split(/=/,$pair);
    $value =~ tr/+/ /;
    $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
 &jcode'convert(*value,'euc'); # 水沢・変更
    if ($name eq 'word') {
        $str = $value;
        $value =~ s/(\W)/\\$1/g;
    }
    $cgi{$name} = $value;
}

 ▲ページトップ


homeホームHTMLに役立つヒント> WASearch2導入記