寺西です。 (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