ローカルファイルを全文検索してみる

Hyper EstraierをとりあえずWindowsにインストール*1したので、使ってみたメモ。

インデックス作成

最近は、ノートとデスクトップで共有すべきファイルは全てMyAssetsディレクトリ以下にぶち込んで、そのままSubversionで管理しているので、MyAssets以下のインデックスを作成してみる。

D:\> estcmd gather -il ja -sd casket D:\MyAssets

インデクシングが始まり、50秒で全ファイルのインデックスが作成完了した。D:\以下にはcasketというディレクトリが作成されたので、インデックス情報は全てここに詰まっているらしい。

D:\> estcmd list casket

でインデックスされたファイルの一覧がずらずらと表示される。

D:\> estcmd list D:\casket

のように絶対パスでインデックスのデータベースを指定することもできる。

D:\> estcmd get casket file:///D|/MyAssets/(ファイルのパス)

とすると、指定したファイルを文書ドラフト形式で取得できる、、、はずなのに no such item って言われて、そのファイルを直接開いちゃうんですけどー。

いきなり最適化!

D:\> estcmd optimize casket

で、casketのインデックスデータを最適化して、不要な領域を削除できるらしい。まさかインデックス作成したてで最適化する必要もないだろー、と思いつつ、一応試してみる。
結果:8.0MB → 1.5MB (゜д゜)
しゅ、しゅごいよ。いきなり5分の1以下になっちゃった。

検索

estcmd search casket "hoge"

とやると、内容に"hoge"が出現するファイルを検索してくれる。
聞いて聞いて!日本語が出てくるファイルはほとんどUTF-8だから、コマンドプロンプトからだと日本語で検索できないのorz
しかも、インデックスには登録されてるけど、あるキーワードでひっかからないファイルもある。なんでだろう。

再びインデックス

また、特定のディレクトリの以下の文書を一括して登録することもできます。対応している文書の形式は、プレーンテキストと、HTMLと電子メール(MIME)です。

ということを思い出したので、プログラムのソースとかがたくさんはいってるからそれじゃあ使い物にならん、ということでインデックスを作り直す。

D:\> estcmd gather -il ja -bc -fe -sd casket D:\MyAssets
  • feで全てのファイルを対象にして、-bcでバイナリファイルを除外。とりあえず、これで.hsとか.rbとか.phpは引っかかるようになった。

しかし、まだ引っかからないファイルがある。
どうやら、英語は単語単位でインデックスが作られているっぽいので、-apnで全ての言語でN-gram法を使うようにしてみる。

D:\> estcmd gather -il ja -bc -fe -sd -apn casket D:\MyAssets

んー、特に結果は変わらず。英語は単語ごとに、ってことか。しかし、コマンドラインから日本語が使えないのは面白くないな。RubyからUTF-8で呼び出したらちゃんと使えるなら、それはそれでいいんだけどさ。

ひとまずここまで。

*1:といっても圧縮ファイルを解凍するだけ