メール検索


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。


インデックス作成バッチファイル(Hyper Estraier)

mkindex.batとでも名前を付けてaccountsフォルダーに保存。

cd /d %0\..
for /d %%A in (*) do (
cd "%CD%\%%A"
estcmd gather -cl -fm -cm -sd ".\index" ".\msg"
)

estcmdの部分を下記に変えるとそれぞれ
estcmd purge -cl ".\index" (削除メールのインデックス削除)
estcmd optimize ".\index" (インデックスの最適化)
ができるので、別のバッチファイルとしてそれぞれ保存すればいい。
どれもaccounts以下のすべてのアカウントに対して行います。

Hyper Estraierのインデックス作成の高速化

すでにインデックス化されたメールを無視して新規のメールのみインデックス化させる方法です。
1) Qmail3のオプション-検索をカスタムにして、更新のところを下記に変更。
cscript qm_gather.js "$index" "$msg"

2)下記をqm_gather.jsとしてqmail3と同じフォルダに保存
var ARGV, index,msg;
var WshShell = new ActiveXObject('WScript.Shell');
ARGV = WScript.Arguments;
index = ARGV(0);
msg = ARGV(1);
var objExec = WshShell.Run('cmd /C cscript //B find.js "' + msg + '" | estcmd gather -cl -fm -cm -sd "' + index + '" -', 10, true);
var objExec = WshShell.Run('cmd /C estcmd create -attr from seq -attr to seq -attr cc seq -attr subject seq -attr @cdate seq "' + index + '"',10,true);
3)accountsフォルダとqmail本体のあるフォルダにfind.jsという名前で次行以下を保存。
var ARGV, index,msg;
var WshShell = new ActiveXObject('WScript.Shell');
var fso = new ActiveXObject("Scripting.FileSystemObject");
ARGV = WScript.Arguments;
msg = ARGV(0);

msg = msg.replace("\\","\\\\");
var fldr, fs, fc, f;
fldr = fso.GetFolder(msg);
fs = new Enumerator(fldr.SubFolders);
for (;!fs.atEnd(); fs.moveNext()){
fc = new Enumerator(fs.item().files);
for (; !fc.atEnd(); fc.moveNext()){
f = fc.item();
if(f.attributes && 32){
f.attributes = f.attributes - 32;
WScript.StdOut.WriteLine(f);
}
}
}
<注意>
必要なときに全文検索窓の「インデックスの更新」を押せば、インデックス化されていないメールのみをインデックス化するので早くなります。
ただし、アーカイブ属性の確認を毎回行うので、この部分をもっとうまく処理すれば更なる高速化が可能です。

さらに、これに対応する全アカウントに対する新規メールインデックス化を行うためのバッチは下記のとおり。

mkindex.batとでもして次行以下をaccountsフォルダに保存
cd /d %0\..
for /d %%A in (*) do (
cd "%CD%\%%A"
cscript //B ..\find.js ".\msg" | estcmd gather -cl -fm -cm -sd ".\index" -
estcmd create -attr from seq -attr to seq -attr cc seq -attr subject seq -attr @cdate seq -attr message-id seq ".\index"
)
おいらはタスクスケジューラでアイドル時にこれを実行させてます。
estcmd createの行は、属性検索を使わなければ不要です。

AHK常駐版インデックス作成バッチファイル(Hyper Estraier)

「Hyper Estraierのインデックス作成の高速化」のアイドル時実行関係をAutoHotKeyにやらせる版です。
MailBoxDirを環境に合わせて変えて、mkindex.ahkとでもしてどこでもいいんで保存して実行してください。
常駐して、10分間操作がなかったら全アカウントインデックス化します。
パイプ処理の方法が分からなかったので一時ファイル作成・削除をしてます。ご利用は自己責任で。
#Persistent
#SingleInstance
SetBatchLines, -1 ; Make the operation run at maximum speed.

;DefIcon=D:\MyDoc\icon\famfamfam_silk_icons_v\icons\clock.ico ;通常タスクトレイアイコン
;WorkIcon=D:\MyDoc\icon\famfamfam_silk_icons_v\icons\clock_red.ico ;処理中タスクトレイアイコン
;Menu,TRAY,Icon,%DefIcon%

;=======================================================
;main
;=======================================================
SetTimer,IndexMail,1000
return

;-------------------------------------------------------
;メールインデックス処理
;-------------------------------------------------------
IndexMail:
If A_TimeIdlePhysical>600000 ;10分以上操作を行っていなければやる
{
 if IndexMailFlag<>1
 {
   gosub, DoIndexMail
   IndexMailFlag=1
 }
}
else
{
 IndexMailFlag=0
}
return

;-------------------------------------------------------
;メールインデックス実処理
;-------------------------------------------------------
DoIndexMail:
;Menu,TRAY,Icon,%WorkIcon%
SplashTextOn, , , メールインデックス更新中

MailBoxDir=D:\bin\QMAIL3\mail\accounts ;accountsフォルダの指定
AMailList=%MailBoxDir%\AMailList.txt ;処理対象ファイルリスト名

Loop, %MailBoxDir%\*, 2
{
 IfExist, %AMailList%						;処理対象ファイルリストが既にあったらなんもしない
 {
   Msgbox, %AMailList% が既に存在します
 }
 else
 {
   IndexDir=%A_LoopFileLongPath%\index
   Loop, %A_LoopFileLongPath%\*.msg, , 1
   {
     IfInString, A_LoopFileAttrib , A
     {
       FileAppend, %A_LoopFileLongPath%`n, %AMailList%
       FileSetAttrib, -A
     }
   }
   IfExist, %AMailList%
   {
     runwait, estcmd gather -cl -fm -cm -sd %IndexDir% %AMailList%, , Hide
     FileDelete, %AMailList%
   }
 }
}

SplashTextOff
;Menu,TRAY,Icon,%DefIcon%
return

サイト内検索

更新履歴

取得中です。

ツール