wwwsrch.cgiで検索対象ディレクトリを複数にするには?

[上に] [前に] [次に]
beer [E-Mail] [HomePage] 1998/10/27(火) 20:37:36
wwwsrch.cgiで検索対象ディレクトリを複数にしたいのですが
$target_dir の後にどう書けば可能でしょうか?

教えて下さい.

B-Cus 1998/10/27(火) 23:47:41
 @target_dirs = ("hoge","fuga");

という行を追加して、
 &search1($target_dir);

をコメントアウトし、かわりにその場所に
 foreach (@traget_dirs){
  &search1($_);
 }

を追加、でどうでしょう。動く自信は全くありませんが。

B-Cus 1998/10/27(火) 23:55:51
s/traget_dirs/target_dirs/

beer [E-Mail] [HomePage] 1998/10/28(水) 12:38:28
B-Cus さんありがとうございました
試してみたんですけど残念ながらダメでした
検索結果が1件も表示されませんでした


B-Cus 1998/10/28(水) 14:09:34
試してみましたけどできましたよ。

もっかい書くと、 先頭部分に
 @target_dirs = ("hoge","fuga");  # 検索させたいディレクトリ。
を追加して、
 &search1($target_dir);
をコメントアウト(行頭に#を付ける)して、そのところに
 foreach (@target_dirs){
  &search1($_);
 }
を追加、です。

もしやそのままhogeとかfugaとか書いた…ってことはないですよね?

beer [E-Mail] 1998/10/28(水) 19:11:01
すみませんtargetのスペル違いでした
訂正して2つのディレクトリを対称にしてテストしてみましたが
どうもまだおかしいようです.

2〜3件は検索結果が出ますが、それだけで全部じゃないし
めったに「検索が完了しました。」が出ないんです
Time out か何かでしょうか?
下記のように書いてますがあってますか?

ちなみに設置場所は
http://www.hf.rim.or.jp/~daiji/cgi-bin/wwwsrch.cgi  です

@target_dirs = ("..","../album");

                #&search1($target_dir);
                foreach (@target_dirs){
                &search1($_);
        }

B-Cus 1998/10/29(木) 02:03:41
WWWサーバのエラーメッセージが出てますから、
間違いなくタイムアウトですね。

Namazuなどの本格的なサーチエンジンを導入するか
(といっても辞書ファイルなどがでかいので、個人
レベルではちょっと難しいですが)、検索対象ファイルを
しぼり込みましょう。

あとwwwsrchの高速化については、さっと見た感じでは、
 ・jcodeのかわりにnkfを使う
 ・evalで高速化
 ・grep(perlのgrepではなく、UNIXコマンドのgrep)で検索
 ・全部Cで書く(^^;
あたりが有効でしょうか。

3つともちょっとperl(とUNIX)を知らないと苦しいですが、
やりたいならまた聞いてください。

そもそもこういう動的な検索には限界があるので、
まあ仕方がないといえば仕方がないでしょう。

beer [E-Mail] 1998/11/12(木) 12:17:20
「 jcodeのかわりにnkfを使う 」
というのもperlとUNIXの知識が必要なんですか?
jcodeのかわりにnkfに置き換えるといった単純作業とは違ったことを
しないといけないのでしょうか?

B-Cus 1998/11/13(金) 01:27:40
いや別にnkfの使い方を知ってるならいいんですけど、
 open(IN,"...|");
などとして、コマンドの実行結果を取り込む方法を
あなたがご存知かどうかわからないので、ああいうふうに
書きました。

まぁ、言いたいことは、

1. nkfについて
 open(IN,"file");
 while (<IN>){
  &jcode::convert(*tmp,'euc');
  …
 }
より、
 open(IN,"nkf -e < file");
 while (<IN>){
  …
 }
の方が多分速い。

2. evalについて
…これはちょっと的外れだったかも。ま、evalは置いといて、
 while (<IN>){
  foreach $word (@words){
   if ( m/$word/ ){
    …
より、
 $search_word = join("|",@words);
 while (<IN>){
  if ( m/$search_word/o ){
    …
の方が絶対速い。


3. grepについて
 $search_word = join("|",@words);
 open(IN,"grep -E '$search_word' file|");
 while (<IN>){
  …
の方が2より速いような気がする

ってことです。

[上に] [前に] [次に]