小田切より自己レスで、その後の経過と、疑問の事お尋ねいたします。
8月15日には公開したいと考えていますのでよろしくお願いいたします。

7月27日に書き込みした、末記の4つの質問中
①は考え方の問題ですが、一応問題なく動作しているようです。
②は現在のpre_namazuの処理で、一応問題なく動作しているようです。
③は当面、最大の関心事にて、今回さらに再質問します。お気づきの点あらばご指導
ください。
④は自力で解決できました。

以上の結果を踏まえて、現在
http://www.net1.jway.ne.jp/hsgjs/groups/index.html
のようなところまできました。表題の複数の条件の検索は、当初寺西さまからご教示
いただいた
検索語 +genre:g01 +place:p02
のような文字列を$queryに与える方法は、一つの文書が複数場所を含む場合に適用困
難なことが判明しました。

従って現在は、下段の4つの条件で検索する部分は、全部特殊のコードを当てはめて
インデックスを作成し、前処理で
検索語 g01 p02
のように、単純なAND結合で検索する方法で解決しました。勿論、条件が「すべて」
の時は検索語への追加は除きます。
以上、表題の「複数の条件の検索」については、ほぼ解決しましたので、お礼かたが
たご報告申し上げます。

【質問】
日本語漢字コードの変換についてお尋ねいたします。
コード不明でキーワードが入力されたとして、これを検索結果画面に&outputルーチ
ンで出力しようとすると、どうしても文字化けしてしまいます。
よく理解しないまま、下記の###ようなコードの変換をして、&outputの代わりに、
&prnを使う事で、文字化けしないようなのですが、まったく自信がありません。
初歩的な質問で恐縮ですが、お気づきの点、なんなりとご教示いただければ幸甚で
す。

【現状対策】 下記の ### 部分の対策をして、keywd_outを作り、出力時に&output
でなく、&prnを使っています。
・namazu.cgi冒頭の記述
&pre_namazu; my
%h_genre,%h_place,%h_area,%h_reqruit,$keywd,$keywd_out,$genre,$place,$area,$
reqruit;

・pre_namazuの処理
sub pre_namazu(){
        # 複数条件検索のキーワードを生成する
        &hash_define; #コード化した条件ストリングを元に戻すためのハッシュ配
列定義(引用省略)
        $qs = $ENV{'QUERY_STRING'};
        @qs = split(/&/,$qs);
        $query ="query=";
        foreach $i (0 .. $#qs) {
                ($fname, $fvalue) = split(/=/,$qs[$i],2);
                if ($fname eq "keywd") {
                        if ($fvalue ne ""){
                                $query  .=
$fvalue;
                                $keywd_out = $fvalue;   ###        
           
                                $keywd_out =~ tr/+/ /;   ###
                                $keywd_out =~
s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;   ###
                                $keywd_out =~ s/&/&/g;   ###
                                $keywd_out =~ s/</&lt;/g;   ###
                                $keywd_out =~ s/>/&gt;/g;   ###
                                $keywd_out =~ s/"/&quot;/g;   ###
                        } else  {
                                $query  .= "whole"; } #キーワードが無いとき
は全部に含まれる「whole」
                        }
                elsif (($fname eq "genre") and ($fvalue ne "g00"))
                         { $query .= "+".$fvalue; $genre =
$h_genre{$fvalue}; }
                elsif (($fname eq "place") and ($fvalue ne "p00"))
                         { $query .= "+".$fvalue; $place =
$h_place{$fvalue}; }
                elsif (($fname eq "area") and ($fvalue ne "a00"))
                         { $query .= "+".$fvalue; $area = $h_area{$fvalue};
}
                elsif (($fname eq "recruit") and ($fvalue ne "r00"))
                         { $query .= "+".$fvalue; $reqruit =
$h_reqruit{$fvalue}; }
        }
        $ENV{'QUERY_STRING'} = $query."&".$qs;
}
・検索結果画面に検索条件を表示するため、カスタマイズした内容 (<font>タグを
省略して引用)
&output("<p><b>(ヒット数)&nbsp;&nbsp; $Keys </b> (検索語)" )
&prn($keywd_out);
&output(" (分類) $genre (場所) $place (対象) $area (募集) $reqruit </p>\n");

-----Original Message-----
From: 小田切亘 [mailto:wotag...@nifty.com]
Sent: Wednesday, July 27, 2011 8:23 AM
To: 'namazu-users-ja@namazu.org'
4.確認したい事項
①インデックス作成はnmz2.0.20、サイトのperlはpnamazu-2006.12.23の組合せの是
非
②複数条件検索をこのようにpre_namazuで行わず、簡易なnamazuの使い方がありそう
に思うので、もしあればご紹介いただきたく。
③sub pre_namazuの中の日本語コードの考え方、今回は正解が別な入力方法で確認で
きたのでそれに合わせたが、最初の「query =」のところだけは、%3Dを使わないで済
んだ。
④テンプレートの中で、{summary}{from}{date}{to}など、文書依存のデーターを予
めファイル化しておき、検索結果に引用している。meta文で与えて、
NMZ.field.genreなどにリストされている情報をテンプレート中に埋め込む方法はあ
りませんか。


_______________________________________________
Namazu-users-ja mailing list
Namazu-users-ja@namazu.org
http://www.namazu.org/cgi-bin/mailman/listinfo/namazu-users-ja

メールによる返信