小田切です 最初に寺西さまに、的確なご示唆いただきながら、当方の力量不足で解決がおくれま した。 今朝、ほぼ寺西さまのおっしゃっている手順が見えてきました。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.xxxxxxというファイルがいくつか出来上がっていましたが、その意味 > がいまひとつ理解できませんでした。 インデックスファイルのファイルフォーマットはここに載っています。 http://www.namazu.org/doc/nmz.html.ja NMZ.field.xxxx の xxxx がそれぞれフィールドになります。 このファイルはテキストファイル(UNIX改行、漢字コードはEUC-JP)で、 1行1文書で、文章ID順にそのフィールドの値が入っています。 つまり、NMZ.field.xxxx は、全文書のフィールド xxxx の一覧に なっています。 例えば、NMZ.field.uri は全文書の URI の一覧であり、 NMZ.field.subject は全文書のタイトルの一覧になっています。 このため、全ての NMZ.filed.xxxx の行数は、ぴったり一致します。 # 一致していないとインデックスが壊れています。 例えば、NMZ.field.uri の 3行目に書かれている URI の文書の subject フィールドの値は何かというと、NMZ.field.subject の 3行目を見ればいいということになります。 (対応付けは行で行います。) 検索結果に各文書のフィールドの値を出力するには、NMZ.result.xxx の中で、${フィールド名} と書くと、検索結果を出力する際に 置換されます。 NMZ.result.normal.ja の中を見てみると、次のような行がありますが、 <dd><strong>著者>: <em>${author}</em></dd> ここの ${author} が、該当する文書のフィールド(author)の内容 に置換されます。 (author は from の別名なので、NMZ.field.from に記録された 内容で置換します。) フィールドの本来の目的は、テンプレートに記述した ${フィールド名} を各文書固有の値に置換することです。 このため、Namazu ではシステムでいくつかデフォルトでフィールド を使うため、インデックスを作ると NMZ.field.xxxx というファイルが 何種類か作られます。 これ以外にもフィールドを追加することができるので、今回は 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 と検索式に 入力すれば検索できます。 ただし、この方法だと、インデックスを更新してもこれらのフィールド ファイルは更新されませんので、インデックスの更新の度にこれらの フィールドファイルを作成して rfnmz を実行する必要があるということ に注意してください。 -- ===================================================================== 寺西 忠勝(TADAMASA TERANISHI) yw3t-t...@asahi-net.or.jp http://www.asahi-net.or.jp/~yw3t-trns/index.htm Key fingerprint = 474E 4D93 8E97 11F6 662D 8A42 17F5 52F4 10E7 D14E _______________________________________________ Namazu-users-ja mailing list Namazu-users-ja@namazu.org http://www.namazu.org/cgi-bin/mailman/listinfo/namazu-users-ja _______________________________________________ Namazu-users-ja mailing list Namazu-users-ja@namazu.org http://www.namazu.org/cgi-bin/mailman/listinfo/namazu-users-ja