2011年8月10日

[Namazu-users-ja 1236] Re:複数の条件の検索

小田切より自己レスで、その後の経過と、疑問の事お尋ねいたします。
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/</</g; ###
$keywd_out =~ s/>/>/g; ###
$keywd_out =~ s/"/"/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>(ヒット数)   $Keys </b> (検索語)" )
&prn($keywd_out);
&output(" (分類) $genre (場所) $place (対象) $area (募集) $reqruit </p>\n");

-----Original Message-----
From: 小田切亘 [mailto:wotagiri@xxxxx]
Sent: Wednesday, July 27, 2011 8:23 AM
To: 'namazu-users-ja@xxxxx'
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などにリストされている情報をテンプレート中に埋め込む方法はあ
りませんか。

--===============1818709256==
MIME-Version: 1.0
Content-Type: text/plain; charset="iso-2022-jp"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

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

投稿者 xml-rpc : 2011年8月10日 10:37
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/105622
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。