[Namazu-users-ja 1227] Windows7 へのnamazuのインストール
小田切といいます 「複数の条件の検索」のスレッドでは、折角寺西さまから、懇切丁寧なコメントをい ただきながら、力量不足で未消化の部分が多くて、面目ありません。 [Namazu-users-ja 1225] Re: 複数の条件の検索 にて、寺西さまから、いままで友人が使用していたのは、pnamazuであるとご指摘を いただきました。 いままでインデックス作成は友人のPC(WindowsXP)上で行っていましたが、遅ればせ ながら、我が家のWindows7へのnamazuのインストールを再挑戦しました。 友人もnamazuは初挑戦で、「perlのバージョンは5.8.xでないと、namazuは使えな い」と聞き、perl5.8.8を探すのに苦労されたようです。 「何を今更」とお思いかもしれませんが、こちらのスレッドも、よろしくご指導お願 いいたします。 【質問1】下記の「nmz2.0.20.001-win32.zip」では、5.8.xでなく、最新の5.12.4で 差し支えないのでしょうか。 環境は自作PCでOSはWindows7 Pro、開発ツールはVisual Studio 2008 Pro(日本 語)、.NET Framework3.5SP1で、VB2008の使用経験はありますが、C++は初めてです。 perlは「ActivePerl-5.12.4.1205-MSWin32-x86-294981.msi」を実行し、c:\perlへイ ンストールして、パスを通しました。 「nmz2.0.20.001-win32.zip」を解凍し、c:\nmz2.0.20.001-win32へコピーしまし た。 以下、同フォルダーにある「README-ja.txt」に従い作業しました。 3.「Libiconv-1.12-ja-4.zip」を解凍し、c:\libiconv-1.12にコピー、コマンドライ ンでnmakeを実行しました。 4.「gettext-0.13.1.zip」を解凍し、c:\gettext-0.13.1にコピー、コマンドライン でnmakeを実行しました。 5. http://www.namazu.org/index.html.ja#downloadのページで 「namazu-2.0.20.tar.gz (1,393,165 byte)」をクリックしたら、保存先に 「namazu-2.0.20.tar.tar」という、1,393,165 byteのファイルが得られました。 【質問2】保存ファイルは拡張子がgzでなく、tarとなりましたが、問題ないのでしょ うか。 Tar解凍は経験がなかったので、フリー解凍ソフト、Woopie.ZIPをインストールし ました。 「namazu-2.0.20.tar.tar」に2回の解凍を施して得た結果を、C:\ namazu-2.0.20 にコピーしました。 念の為、解凍結果は5,300,978byte ファイル数: 597、フォルダー数: 34です。 6.「このアーカイブを解凍して得られたmsvcディレクトリ」と書かれているのが、よ く理解できませんでしたが、 c:\nmz2.0.20.001-win32 の中のmscvディレクトリをC:\ namazu-2.0.20にコピー しました。 【質問3】mscvディレクトリの理解はこれで良かったでしょうか 7.Visual Studio を起動し、「ファイル」「ファイルを開く」から c:\namazu-2.0.20\mscv\namazu.sinを開きました。 するとVisual Studio変換ウィザードがでて、自動変換が行われましたが、エラー はありませんでしたが、下記の3パターンで、全部で5個の警告が出ました。 ログ表示 http://ikiiki.main.jp/UpgradeLog.XML.GIF 【質問4】これらの警告は無視して良いのでしょうか 8.警告を無視して、ソリューションエクスプローラで、namazuプロジェクトを選択 し、「ビルト」メニューの「ソリューションのビルト」を実行したら、3つの警告と 30の致命的エラーがでました。 エラー表示 http://ikiiki.main.jp/BuiltError.GIF 対象ファイルこそいろいろですが、内容は上記の2つのパターンです。 Windows7の検索で、「libintl.h」を検索したら、73ファイルから参照されているの に、このような名前のファイルもディレクトリも見つかりませんでした。 【質問5】何故見つからないか、3項のやり方に問題があったのでしょうか。 【質問6】C++によるコンパイルなど行わないで、Windows7にnamazuをインストールす る方法があれば、ご教示ください。 【質問7】本題から外れますが、 ・テキストまたは画像ファイルを添付することは差し支えありませんか、その場合の 容量の制限は? ・HTML形式にして、簡単な画像を挿入することは差し支えありませんか -Original Message- From: namazu-users-ja-boun...@namazu.org [mailto:namazu-users-ja-boun...@namazu.org] On Behalf Of Tasamasa Teranishi Sent: Monday, July 11, 2011 10:35 PM 寺西さま いや、pnamazu ですね。これは。-- ___ Namazu-users-ja mailing list Namazu-users-ja@namazu.org http://www.namazu.org/cgi-bin/mailman/listinfo/namazu-users-ja
[Namazu-users-ja 1229] Re: 複数の条件の検索
小田切です 最初に寺西さまに、的確なご示唆いただきながら、当方の力量不足で解決がおくれま した。 今朝、ほぼ寺西さまのおっしゃっている手順が見えてきました。19日まで少し取り 込んでいるので、その後確認します。 現状までで、確認したいことを2〜3お願いします。 現状 1.nmz2020をインストールし、README-ja.txtに従い設定しました。 途中mknmzrcとnamazurcが私には難解でしたが、下記を頼りに編集しました。 http://www10.plala.or.jp/miyazawa/namazu/nmzconf.html この結果 c:\mknmz -C c:\namazu -C c:\mknmz -O c:\namazu\var\namazu\index c:\namazu\share\namazu\html でほぼ初期の目的のインデックスが得られました。 但し、namazu.cgi.exeと.mknmzrcをリモートに置いての実行はどうしても成功しま せん。 ご教示いただいたnamazu-win32-users...@namazu.orgメーリングリストの 新旧ログにも何回か提起されているものの、解決できず現状はほぼ諦めています。 2.リモートのcgi-binで、namazu.cgi.exeはダメですが、perlのnamazu.cgiなら動き ます。 そこで邪道ですが、友人がnmz2014betaで作った、namazu.cgiを使い、上記のイン デックスと組み合わせると良いらしいことが分かりました。 しかし、前回ご相談したように、このnamazu1014Betaから生成したmanazu.cgiは、 pnamazuというものらしく、改行抜きで理解困難です。 Nmz2014betaより新しいバージョン(できればnmz2020で)、perlのnamazu.cgiは入手 することができますか方法があればご教示ください。 C++2008でコンパイルというのも、よく理解できず、中途でGiveupしています。 3.さて、本題ですが、nmz2020でインデックス作成に関し、 meta name=genere content=nn meta name=place content=nn meta name=area content=nn を各ターゲット文書の/headの前に追加し、 mknmz =O c:\namazu\var\namazu\index -M c:\namazu\share\namazu\html にて、インデックスの中に、 NMZ.field.genre NMZ.field.genre.i などが追加されるのを確認でき、続いてrfnmzコマンドを実行しました。 上記のコマンドラインに、自信がありませんが、-Mのオプションの位置はこれでい いですか。 4.さて検討中の http://ikiiki.main.jp/ota-hsgjs/ から呼び出す、namazu.cgiの入り口で送信されるデータを確認してみると、 keyword,genre,place,area,押されたボタンのname(ここではsearch-1,search-2) などが渡されていることが確認できました。 この場合 keyword=大久保 なら普通の検索、また keyword=大久保 and +genre:00 and +place:02 and +area:05 なら、 genre=00 且つ place=02 且つ area=05 且つ 大久保を含むhtmlが検索さ れるという理解でよろしいですか。 5.この理解で正しいとして、実際の検証は私事都合で7月20日以降になりますが、 検索画面で、キーワード検索の時は、そのままnamazu.cgiを利用し、 複数の条件の検索の時は、下の「さがす」ボタンから、前処理のprenamazu.cgiに 制御を写し、そこの中のperlで keyword=大久保 and +genre:00 and +place:02 and +area:05 のように組み立てなおしてから、namazu.cgiに制御を移すことを考えています。 この理解でよろしいでしょうか。 -Original Message- From: namazu-users-ja-boun...@namazu.org [mailto:namazu-users-ja-boun...@namazu.org] On Behalf Of Tasamasa Teranishi Sent: Friday, July 08, 2011 2:23 AM Cc: namazu-users-ja@namazu.org Subject: [Namazu-users-ja 1220] Re: 複数の条件の検索 寺西です。 (2011/07/07 6:56), 小田切亘 wrote: 基本を勉強しないで、対処療法でNMZ.head.ja、NMZ.body.ja、NMZ.foot.ja、 namazu.cgiは何とか動作がつかめたので,欲をだしました。 NMZ.field.xxというファイルがいくつか出来上がっていましたが、その意味 がいまひとつ理解できませんでした。 インデックスファイルのファイルフォーマットはここに載っています。 http://www.namazu.org/doc/nmz.html.ja NMZ.field. の がそれぞれフィールドになります。 このファイルはテキストファイル(UNIX改行、漢字コードはEUC-JP)で、 1行1文書で、文章ID順にそのフィールドの値が入っています。 つまり、NMZ.field. は、全文書のフィールド の一覧に なっています。 例えば、NMZ.field.uri は全文書の URI の一覧であり、 NMZ.field.subject は全文書のタイトルの一覧になっています。 このため、全ての NMZ.filed. の行数は、ぴったり一致します。 # 一致していないとインデックスが壊れています。 例えば、NMZ.field.uri の 3行目に書かれている URI の文書の subject フィールドの値は何かというと、NMZ.field.subject の 3行目を見ればいいということになります。 (対応付けは行で行います。) 検索結果に各文書のフィールドの値を出力するには、NMZ.result.xxx の中で、${フィールド名} と書くと、検索結果を出力する際に 置換されます。 NMZ.result.normal.ja の中を見てみると、次のような行がありますが、 ddstrong著者: em${author}/em/dd ここの ${author} が、該当する文書のフィールド(author)の内容 に置換されます。 (author は from の別名なので、NMZ.field.from に記録された 内容で置換します。) フィールドの本来の目的は、テンプレートに記述した ${フィールド名} を各文書固有の値に置換することです。 このため、Namazu ではシステムでいくつかデフォルトでフィールド を使うため、インデックスを作ると NMZ.field. というファイルが 何種類か作られます。 これ以外にもフィールドを追加することができるので、今回は genre、place、area を追加すれば目的は果たせそうですよ。 フィールドのもう一つの目的は、検索結果の並べ換えです。 複数件検索結果が得られた場合、フィールの値を使って並べ換える ことができます。 著者名順とか、サイズ順とか URI 順というのは、それぞれに対応する フィールドの値をキーにして、検索結果を並べ替えています。 最後に、フィールドの中身自体を検索に使う機能もあり、これが フィールド検索になります。 Namazu.cgiがPOSTでなく、GETからのデータ受け取りになっていることも、理解 を妨げていました。 POST も GET も大きな違いはないはずですけど。 namazu.cgiは改行が省かれているので、終わりの方の検索結果表示をカスタマイ ズするのに、沢山改行記号を挿入して、ようやく把握できました。 改行が省かれているというのはよくわかりませんが、 もしかして改行コードが違うという話ですかね。 この複雑な表記のnamazu.cgiになるべく触らずに、フィールドをいろいろ使いこ なすことはできるのでしょうか。 フィールドの値を表示したり、検索結果のソートに使ったりぐらいは もう使われていたりするのではないかと思います。 もし、フィールドを駆使したサンプルなどを存知でしたら、是非ご恵示ください。 これじゃダメでしたでしょうか? html head meta name=genere content=00 meta name=place content=05 meta name=area content=11 /head body : のようにしてフィールド値をMetaタグで仕込みます。 次に mknmzrc の $META_TAGS を次のように変更します。 $META_TAGS = genere|place|area; そして、インデックス作成時に mknmz に -M オプションを指定すると、 各 HTML の meta タグで指定した genere, place, area フィールド値 から、NMZ.field.genere*, NMZ.field.place*, NMZ.field.area* を 含むインデックスが作成できます。 元文書が HTML じゃないようなので、 元文書が HTML でない場合にフィールド情報を仕込む手段はいろいろ ありますが、長くなるのでここでの説明は省略します。 これを示さないといけないかな? 本来だと、その文書用のフィルタを作って、そこでフィールドを切り出す といったことをすればいいだけなんですが、それが難しいということなら、 簡易な方法を紹介します。 インデックスを作成した後、NMZ.field.uri の中身を確認しながら、 自分で NMZ.field.genre, NMZ.field.place, NMZ.field.area を作ります。 作成手段は問いません。手で入力しても、プログラムで作っても 何でもいいです。 重要なことは、UNIX形式で漢字コードはEUC-JP、あとは行の対応さえ とれていれば良いのです。 NMZ.field.uri と NMZ.field.genre, NMZ.field.place, NMZ.field.area の行数がぴったり一致することを確認して、rfnmz コマンドを実行 します。 http://www.namazu.org/doc/manual.html.ja#rfnmz すると、NMZ.field.genre.i, NMZ.field.place.i, NMZ.field.area.i という ファイルができ上がります。 これで、genre, place, area のフィールドが Namazu で使えるように なりましたので、フィールド検索にこれらが使えます。 genre の 00 のものを検索したければ、+genre:00 と検索式に 入力すれば検索できます。 ただし、この方法だと、インデックスを更新してもこれらのフィールド ファイルは更
[Namazu-users-ja 1234] Re: 複数の条件の検索
小田切です 寺西さま Namazu 2.0.21 リリース関係の対応に追われており、本件のメール の対応が先送りになっております。申し訳ありません。 お忙しいなか寺西さま、臼田さまには丁寧かつ適格なご指導をいただき、我流ながら 形ができつつありますので、ご報告いたします。 お忙しい中、長文ですみません。 このメーリングリストでは添付ファイルは禁止と考え、少し見にくいが、サイトに アップしました。 またhttp://www.tcp-ip.or.jp/~furukawa/pnamazu/ のご紹介ありがとうございまし た。 1.環境 Web サーバー ・テスト環境(自宅でnamazu.cgiは使用せず) lollipop ロリボプラン、perl5使用 可、 namazu.cgi.exeは× ・最終ターゲット環境 プロバイダーJWAY、perl5使用可、 namazu.cgi.exeは× テスト機 ・Windows7、nmz2.0.20.001-win32、perl5.8.8、kakasi-2.3.4.zip http://www10.plala.or.jp/miyazawa/namazu/nmzconf.html を参考にして mknmzrc、namazurc編集 2.複数の条件の検索のためやったこと ・{$summary}には、文書表示部分が使われるので、インデックス作成時のみ、文書名 は同じで、検索結果として表示したい順序に並び替えたものを作成したこと。 このときのmeta文と検索画面のフォームの抜粋は http://ikiiki.main.jp/i/html_sample.gif の通りです。 ・NMZ.body.ja、NMZ.tips.ja、NMZ.head.ja、NMZ.foot.ja、および NMZ.resultnormal.ja、NMZ.resultshort.jaをカスタマイズしてtemplateパスへ収 納 ・namazu -O (indexパス) -M (htmlパス) でインデックス作成、 ・rfnmz (indexパス) を実施、NMZ.field.genreなどにインデックスができているこ とを確認 ・pnamazu-2006.12.23にあるpnamazu.cgiをsrc内のperlソース文を参考にして、 http://ikiiki.main.jp/i/custom_1.gif のように編集しました。 目的はフォームからkeywd・genre・place・areaでうけとったものを繋いでqueryと して渡す前処理と検索結果表示のヘッダ―の省略することです。 ・以上の(indexパス)内容とnamazu.cgiをアップロードしました。 3.テスト結果 http://ikiiki.main.jp/i/test_1.gif では単純検索のキーワードに「キー +フィー ルド名:コード」の形で入力したもので、結果は http://ikiiki.main.jp/i/result_1.gif のようになりました。カスタム化した部分 のif文はいずれも実行されません。 なお上部にsub pre_namazu実行前後の環境変数を示します。 http://ikiiki.main.jp/i/test_2.gif ではフィールドの条件を下の選択リストで フォーム入力させた結果で、よく判らないまま日本語コードで苦労しましたが、同じ queryが得られるようにif文の中で演算し、 http://ikiiki.main.jp/i/result_2.gif のように同じ結果が得られました。 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
[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//amp;/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(pb(ヒット数)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