[Namazu-win32-users-ja 129] Re: SEARCH_FIELDの追加

Tetsuya Obayashi tetsu @ arcadia-ent.com
2004年 12月 9日 (木) 03:37:53 JST


寺西様

ご連絡ありがとうございます。返信が遅れ申し訳ありません。

下記インラインにて、失礼いたします。

On Wed, 08 Dec 2004 15:24:45 +0900
Tadamasa Teranishi <yw3t-trns @ asahi-net.or.jp> wrote:

TT> > 試行錯誤しながら、何とかインデックスを作成し、全文検索が出来るところまで
TT> > はこぎつけたのですが、WordやExcelなどのMSオフィスドキュメント内のファイ
TT> > ル->プロパティで閲覧できる、タイトル、サブタイトル、作成者、などのField
TT> > を特定して検索するという点で、行き詰っております。
TT> > 
TT> > 最初に行ったのは、mknmzrc内の、$SEARCH_FIELDを下記の通り変更した結果、中
TT> > 身がIndexを作成したファイルの数だけ改行のみが入っている、fieldインデック
TT> > ス(NMZ.field.categoryなど)が作成されました。
TT> > $SEARCH_FIELD ="keywords|title|comments|category|subject|from|date|uri|to|summary|size";
TT> 
TT> まずは Namazu のデフォルトの動作について解説します。
TT> olemsword.pl 等では、
TT> 
TT> 1. Title か Title が空の場合、Subject を $field->{'title'} に入れます。
TT> 2. Last Author か、Last Author が空の場合は Author を $field->{'author'}
TT>    に入れます。
TT> 3. keywords を本体に入れます。

keywordsを本体(index本体でしょうか?)を入れるのは、olemswords.plでしょ
うか。それとも、mknmzでしょうか。

私の理解では、mknmz内のsub put_field_indexでNMZ.fields.*にデータを格納し
ているように思えます。(これも見当違いかもしれませんが。)

TT> title は subject の別名で、author は from の別名になります。
TT> このため、デフォルトの
TT> $SEARCH_FIELD =
TT> "message-id|subject|from|date|uri|newsgroups|to|summary|size";
TT> の内容に従って、
TT> NMZ.field.subject, NMZ.field.from にタイトル、著者の情報が入ります。

現在はそのように動作しております。

TT> また、keywords は検索可能なはずです。
TT> 
TT> 標準の状態で、通常の検索をおこなって、Keywords の中身が検索できている
TT> でしょうか?

keywordsの抽出は、出来ております。言葉足らずで失礼いたしました。

しかし、デフォルトのままですので、フィールド指定の検索で+keywords:と検索
しても結果は表示されない状態です。(NMZ.field.keywordに何も格納されてい
ない為)

Search_Fieldに関して言えば、フィールドの削除は出来ても、追加は出来ないと
言う事になるのでしょうか。

TT> これができておれば、
TT> $cfile->BuiltInDocumentProperties('keywords')->{Value};
TT> で値の取り出しができていることになりますので、下記のソースのうち
TT> 怪しいのは後述の一箇所ぐらいです。
TT> 
TT> > そこで、まったく見当違いかもしれませんが、MS Wordドキュメントフィルタと
TT> > 思われる、olemsword.pl内のgetPropertiesサブルーチンを下記の通り変更して
TT> > みたのですが、結果は全く変わりませんでした。
TT> ...
TT> >     my $keyword = $cfile->BuiltInDocumentProperties('Keywords')->{Value};
TT> 
TT> ここで設定しているので、
TT> 
TT> >     $keyword = $cfile->BuiltInDocumentProperties('Keywords')->{Value}
TT> >         unless (defined $keyword);
TT> 
TT> この2行は不要です。
TT> 

ありがとうございます。早速削除いたしました。

TT> >     $fields->{'Keywords'} = codeconv::shiftjis_to_eucjp($keyword)
TT> >         if (defined $keyword);
TT> 
TT> $fields->{'Keywords'} は $fields->{'keywords'} のように 
TT> $SEARCH_FIELD と合わせておかないとダメだったかもしれません。
TT> (大文字、小文字を区別する恐れがあります。)
TT> 他との整合性のためにも、ここは小文字で書いた方が安全でしょう。
TT> 
TT> $fields の中を小文字に変えて試してみてください。

上述の通り、keywordsに関しては、デフォルトでの動作は出来ております。ただ
この部分を少し応用できれば、仮にolemsword.plなどでデータが抽出出来ている
と仮定すると、categoryやcommentsも、MNZ.field.*へ出力出来るような気がす
るのですが、やはり難しいのでしょうか。

最終的には、フィールド指定の検索を、+category:, +keywords:, +comments:で
も実現したいと考えております。

もしご存知であれば、ご教授下さい。

よろしくお願いします。






Namazu-win32-users-ja メーリングリストの案内