teematsu @ ウィキ

検索エンジン

最終更新:

teematsu

- view
管理者のみ編集可

Windows Desktop Search (WDS)

検索エンジンにWDSを使う。

以下に記載の方法に従う

が、Vistaで、うまくいかない

  • メールがおいてあるフォルダがインデックス作成対象に入っているか確認
    コントロールパネルの[システムとメンテナンス]-[インデックスのオプション]
  • さらに[詳細設定]をクリック。[ファイルの種類]で 拡張子にmewが入っているか確認

当方の場合、拡張子にmewが入っていない。

  1. wdsgrep -R を実行
    Failed to access registry.
  2. 管理者権限でコマンドプロンプトを実行して、wdsgrep -R を実行
    Failed to access registry: HKEY_LOCAL_MACHINE\SOFTWARE\Classes\eml
    src 'eml' cannot be found.
    
  3. 管理者権限でコマンドプロンプトを実行して、wdsgrep -R mew=eml
    Registration succeeded.
    '.mew' is registered to WDS as the same file type of '.eml'.
    

1,2 はNGっぽい。 3をやったのちに先の[ファイルの種類]には拡張子mewが追加されるようになった。 この状態でインデックスを再作成。([インデックスのオプション]で[詳細設定]の[再構築]を実行)

この段階で、インデックスは作成されている模様。以下のように実行して、???.mewがヒットすることが確認できた。

 wdsgrep -e .mew キーワード

しかし、mewのk/コマンドで1件もメールがヒットしない。 mewは-pオプション付きでwdsgrepを呼び出しているが、wdsgrepは-pでパスが限定されるとヒット件数が0件になってしまう模様。(-p C:\ はOKだが、-p C:\Users や C:\Users\name\~ だとNG)

mew-search.elを書き換え

(defun mew-search-wds (pattern path)
 (setq pattern (mew-cs-encode-string pattern default-file-name-coding-system))
 (let* ((ent (mew-search-get-ent mew-search-method))
  (prog (mew-search-get-prog ent)))
   (mew-plet
    (mew-alet
     (call-process prog nil t nil "-e" mew-suffix "-p" path "-s" pattern)))))

最後の行の "-p" path を削除

これでk/による検索が可能になった。ただ、検索フォルダが限定されていないことによる悪影響は不明。

mew-search.elを書き換えるにあたっては、

  • <meadowインストール先>\site-lisp\mew のmew-search.elc を ~.elc.bakなどにリネーム
  • 同じフォルダのmew-search.elを書き換え

Windows7の場合

インデックスの作成

  1. 管理者権限でコマンドプロンプトを実行して、
  2. wdsgrep -R mew=eml または wdsgrep -R .mew=.eml (両方試したため、どちらが効いたのか不明)

この状態で[コントロールパネル]から[インデックスのオプション] (たどり方は不明なので右上のボックスで検索する)で、[詳細設定]の[ファイルの種類]タブから .mew を 確認すると、「ファイルプロパティのフィルター」となっているはず。[このファイルのインデックスの作成方法]から「プロパティとファイルのコンテンツのインデックスを作成する」 を選択すると、プレーンテキストフィルター となる。この状態でインデックスを作成しても、.mewファイルがISO-2022-JPであり、これがそのままASCIIなファイルとして解釈されて 処理されているようであり、日本語文字は検索できない。

レジストリを書き換えて .eml と同じ Windows Live MIME Filter が適用されるようにする。

  1. regedit.exeを軌道
  2. HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.eml の (既定), Content Type の値を確認
    (既定)       REG_SZ WindowsLiveMail.Email.1
    Content Type REG_SZ message/rfc822
    
  3. HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.eml\PersistentHandler の (既定)の値を確認
    (既定) REG_SZ {E679C85F-9019-490a-8EFD-57F03622F052}  (この値は 環境によって異なっているのか共通なのかは不明)
    
  4. これらを HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.mew と HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.mew\PersistentHandlerにそれぞれコピー。おそらく、WindowsLiveMail.Email.1 は、wdsgrep -R で自動的に作成されているので、改めてコピーする必要はない。また、おそらく、前述のように「プロパティとファイルのコンテンツのインデックスを作成する」を選択することで、PersistentHandlerの(既定)が自動的に作成されているのではないかと思うが、それを上書きする。

この状態でインデックスを再作成。([インデックスのオプション]で[詳細設定]の[再構築]を実行)

Mewのメッセージが入っているフォルダで、Explorerでメール内の文字列を検索すると、ヒットするようになる。

Content Typeは、もしかしたら不要かもしれないが、未確認。

wdsgrep の改造

http://kobayats.seeds-man.com/bx/index.cgi/tool/201001182200.htm

に記載のとおり、Windows 7 ではwdsgrepが、拡張子を限定した検索をしようとするとヒットしなくなる問題がある。 上記のページに記載のとおり、ソースを書き換えてビルドする。言語はC#、Visual Studioでビルドした。

参考

Filter Handlerの登録(英語) レジストリの構造の情報

目安箱バナー