古いメールを全文検索できるよう保存する
昔からのメールが溜まってて,検索できる状態で置いときたい.
どんな検索エンジンを使うのがいいかを検討した.
ざっくり言うと
Xapian をバックエンドとするmu でインデックスして,サーバーサイドでmu4e をつかって検索するのがよさそう.
やりたいこと
- 古いメールは,普段目に触れないようにしたい
- 検索したい
- 検索するのはまれなので,常駐プロセスを増やしたくない
候補
- クライアント側で検索
- Mail.app
- Thunderbird
- サーバー側で検索
- Lucene バックエンドなもの (Solr,Elasticsearch など)
- Xapian バックエンドなもの (mu など)
比較
古いメールの一部を使って試す.
- 930MB
- 2.5万通
クライアント側で検索
(MacBook Pro - Retina, Mid 2012)
慣れたメールアプリで検索できるが,インデックスするのにダウンロードが発生する.筋が悪い方法だけど いちおう試してみる.古いメールはIMAP で取ってくる.
インデックス時間 | ダウンロード後のフォーマット | ダウンロード後のサイズ | インデックスサイズ | |
---|---|---|---|---|
Mail.app | 1時間 | .emlx | 1.3GB | 22MB |
Thunderbird | 10分 | mbox | 890MB | 55MB |
Mail.app
-
- インデックス時間も保存メールサイズも現実的
サーバー側で検索
(4 core 3.3GHz + 4GB RAM)
- Lucene ベースのSolr,Elasticsearch はdaemon を常駐させないといけないので,今回の用途には合わない
- Java 書いて直接Lucene 叩けばいけそう (やってない)
- dovecot-lucene はアリかも (libc6 ごとアップグレードする必要があって試してない)
- IMAP SEARCH にも対応できる
- メモリを浪費する可能性ある
- いっぽうXapian は常駐しないタイプのフロントエンドが充実
- 今回はmu を試した
インデックス時間 | ダウンロード後のフォーマット | ダウンロード後のサイズ | インデックスサイズ | |
---|---|---|---|---|
mu | 1分 | - | - | 110MB |
インデックスするには
$ mu index -m ~/Maildir
検索するには,CLI から
$ mu find ipv6
$ mu find from:\*gmail subject:ipv6
のようにするか,mu4e をつかう.
$ emacs -f mu4e
気軽でいい感じ.
インデックス時のスワップに注意
メモリをじゃぶじゃぶ使うタイプのソフトウェアっぽくて,
$ mu index --xbatchsize 1000 -m ~/Maildir
のようにしてメモリ使用量を抑える必要があった.
インデックスの最適化
mv .mu/xapian .mu/xapian.old xapian-compact .mu/xapian.old .mu/xapian rm -rf .mu/xapian.old
インデックスサイズが3.4G → 2.2G まで小さくなった.
まとめ
下のどちらかがいいと思う.
- Thunderbird に食わせて,サーバーからメールを消す
- サーバー側に置いといて,mu か mu4e で検索する