この段階で、“Wonderland”で検索をかけても小説“Alice in Wonderland”が見つからないことがわかった。これは、Project Gutenbergのサイトからダウンロードした小説の本文を「alice13a.txt」というファイルに保存したものだ。このファイルが見つからないということは、Strigiのフルテキスト検索で、本来見つかるはずのファイルがすべて見つかるとは限らないことを意味する。この不具合をデバッグするためにSQLite 3のStrigiバックエンドをビルドしたところ、「alice13a.txt」の情報がインデックスになっていないことがわかった。
Strigiがlibmagicを使っていること、その前のファイルインデキシングのコードは動作していたことから、何か意図があって「alice13a.txt」を無視しているのではないかと思った。libmagicライブラリは、ファイルタイプとファイルのMIMEタイプの検出に使われている。libmagicのコマンドラインツールにあたるのがfileである。「file -i」を実行してレポートされるMIMEタイプを確認すると、2つのファイルが「application/octet-stream」であるとのレポート出力が得られた。そのうちの1つが「alice13a.txt」だった。「alice13a.txt」のコピーを作成し、“Alice in Wonderland”という文字列を含む冒頭部だけを「alice-copy.txt」としたところ、fileコマンド(つまりlibmagic)はこれを間違いなくテキスト文書として認識してくれた。
|
| 「Wonderland」の検索結果 |
続いて、strigiclientの「start indexing(インデキシングの開始)」をクリックして、Strigiインデックスの更新を行った。そのあとで検索ウィジェットに「Wonderland」と入力すると、無事に「alice-copy.txt」を見つけ出すことができた(右図参照)。さまざまな文字エンコーディングがプレーンテキストの保存に使われる可能性がある場合、プレーンテキストファイルを確実に検索できることが課題になり得る。要するに私は、Project GutenburgのテキストがStrigiで無視されるとは予期していなかったのだ。
Strigiのdeepfindおよびdeepgrepコマンドでは、アーカイブファイルの中身まで検索できる。deepfindは、オプションのコマンドライン引数を1つしか取らない。このオプションは再帰的検索の起点を指定するもので、省略した場合はカレントディレクトリが起点になる。Strigiによって見つかった各ファイルのパスが1行ずつ表示される。deepfindが便利なのは、探すファイル名がわかっていてそのファイルのすべてのバージョンを見つけ出したい場合だ。しかもtar.gzファイル内にあるファイルも見つけてくれる。
deepgrepもdeepfindと同じようにアーカイブファイルの検索ができるが、標準のgrep(1)コマンドにより近い動作をする。だが、先週までにリリースされた多くのバージョンのdeepgrepには、まったく動作しないというバグがある。Strigiの次回リリースには修正版が収録される予定だ。deepgrepは次のように、必要な情報を含むアーカイブを、展開することなく探し出すのに役立つ。
$ deepgrep documentation /tmp/strigi-0.5.7.tar.bz2 /tmp/strigi-0.5.7.tar.bz2/strigi-0.5.7/cmake/FindQt4.cmake: # ask qmake for the documentation directory /tmp/strigi-0.5.7.tar.bz2/strigi-0.5.7/src/streamanalyzer/analyzerconfiguration.h: * TODO: write proper documentation of the pattern syntax. /tmp/strigi-0.5.7.tar.bz2/strigi-0.5.7/src/streamanalyzer/analyzerconfiguration.h: * See the documentation for the non-const version of this function. ...
Strigiによるインデックスへのファイルの追加は高速だが、完璧ではない。GUIの検索クライアントでは、一般的な検索の設定がもっと楽にできるようにしてほしい。たとえば、strigiappletでは検索文字列を入力できるが、どのフィールドをクエリに使用するかは選択できない。また、この検索クライアントが人が理解できる形式の時間文字列を解析できるようになれば、一定期間内に変更されたファイルの検索はもっと容易になるだろう。
全体として見れば、Strigiはファイルサイズ、ID3タグ、ファイル名のようなメタデータまたはテキストコンテンツによるファイル検索に便利なフレームワークだ。
Ben Martinはファイルシステムに10年以上携わっている。博士号を持ち、現在はファイルシステムのlibferrisと検索ソリューションに注力。
