Namazu-win32-users-ja(旧)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: ファイル名で検索したいのですが



花井と申します。

──"Akiyama Yasuhito" <aki@xxxxxxxx>さんwrote:──
  On Fri, 13 Jun 2003 00:34:07 +0900
  Subject: [namazu-win32-users-ja] ファイル名で検索したいのですが
───────────────────────────────────
> やりたいことというのは、Namazuで未対応の形式のファイルでもファイル名などで検
> 索することはできませんか?ということです。
> 
> もう少し細かくいとう、Namazuでエクセルファイルなどを検索するときは、検索条件
> に xls と入れても検索されます。ただし、exeファイルなどのバイナリや未対応の形
> 式のファイルでは、ファイル名で検索できません。

佐久間さんの方法とは別のやり方で、フィルターの作成でなんとかできないかと、
やってみたところ、とりあえず、拡張子固定(フィルターに記載した拡張子だけ、
検索の対象となる)では、なんとかできました。

(数ファイルのみ対象にした実験レベルでの報告です。
 動作や、動作させた結果については未保証と言うことで。)

フィルターのサンプルを文末に転載します。
「.exe」だけをファイル名での検索対象にするサンプルフィルターです。

動作原理は
「本来文章の内容を書き出している一時ファイルに、ファイル名(パス名)を書き出す」
という原始的なものです。


・filename.pl等(*.pl)で保存して¥namazu¥share¥namazu¥filter¥フォルダにコピー
・mknmzrcで「.exe」を検索対象にする

当方環境では上記にて、ファイル名(フルパス名に含まれる文字列)にて検索出来る
ことを確認しました。

sub add_magic ($) の部分を

    $magic->addFileExts('\\..+$', 'application/filenameonly');
    (全部の拡張子を検索対象にする)

にでも変更(mknmzrcも同様に変更)すれば、全ファイルがファイル名での検索対象
になるかもしれませんが、未検証です。
(本来、検索対象の.html,.txt,.pdf等が文書の内容で検索出来なくなるかも?)


----filename.plここから----
package filename;
use strict;
use File::Copy;
require 'util.pl';
require 'gfilter.pl';
sub mediatype() {
    return qw(
	application/filenameonly
    );
}
sub status() {
    return 'yes';
}
sub recursive() {
    return 0;
}
sub pre_codeconv() {
    return 0;
}
sub post_codeconv () {
    return 0;
}
sub add_magic ($) {
    my ($magic) = @_;
    $magic->addFileExts('\\.exe$', 'application/filenameonly');
    return;
}
sub filter ($$$$$) {
    my ($orig_cfile, $cont, $weighted_str, $headings, $fields)
      = @_;
    my $cfile = defined $orig_cfile ? $$orig_cfile : '';
    my $tmpfile  = util::tmpnam('NMZ.filename');
    open (OUT,">$tmpfile") || return "file open error";
    print OUT ("$cfile\n");
    close (OUT);
    {
        my $fh = util::efopen("< $tmpfile");
        $$cont = util::readfile($fh);
    }
    unlink($tmpfile);
    gfilter::line_adjust_filter($cont);
    gfilter::line_adjust_filter($weighted_str);
    gfilter::white_space_adjust_filter($cont);
    $fields->{'title'} = gfilter::filename_to_title($cfile, $weighted_str);
    gfilter::show_filter_debug_info($cont, $weighted_str,
               $fields, $headings);
    return undef;
}
1;
----filename.plここまで----

============================================================================
NECフィールディング.東日本CSD.テクニカルサポート部.花井 亮(はない あきら)
    http://www.geocities.co.jp/SiliconValley-Oakland/8718/
----------------------------------------------------------------------------