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

小田切亘 wotagiri @ nifty.com
2011年 7月 18日 (月) 09:14:54 JST


小田切です

最初に寺西さまに、的確なご示唆いただきながら、当方の力量不足で解決がおくれま
した。
今朝、ほぼ寺西さまのおっしゃっている手順が見えてきました。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-ja @ 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-bounces @ namazu.org
[mailto:namazu-users-ja-bounces @ 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-trns @ 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 メーリングリストの案内