Hyper Estraierで全文検索なんてどうですNo.09986
nohhoso さん 05/11/29 00:16
 
nohhoso です。

ご存じかもしれませんが、Hyper Estraierという全文検索ツールがあります。
LGPLのライセンスで配布されており、秀丸メールのようなシェアウェアでも
ソースの公開などをせずに使用できます。
また、Hyper EstraierはN-gramという検索方式を使用するため、日本語を
漏れなく検索できるという特長もあります。
http://hyperestraier.sourceforge.net/

Hyper Estraierを組み込んでの全文検索が、秀丸メールに搭載されると、
鬼に金棒かと思います。
ご検討いただけないでしょうか。

プログラミングガイド( http://hyperestraier.sourceforge.net/pguide-ja.html )を
ご一読いただけると、いかに簡単に全文検索が行えるかを
ご理解いただけると思います。


[ ]
RE:09986 Hyper Estraierで全文検索なんてNo.09987
秀まるお さん 05/11/29 14:02
 
 その、Hyperestraierって関係のドキュメントとか見たんですけど、なかなか
すぐに理解してプログラミングできるって物でもなさそうでして、勉強するだけ
でもしばらくかかりそうです。

 何か適当なサンプルプログラムでもあれば、それを元に何とかできるかもしれ
ませんけど。例えばgoogleデスクトップ検索の時もそういうサンプルを元にして
作りましたが。

 とりあえず他にもいろいろネタがあるので、そういうネタの1つとして覚えて
おくこととさせていただきます。

[ ]
RE:09987 Hyper Estraierで全文検索なんてNo.09988
nohhoso さん 05/11/30 00:43
 
nohhoso です。

> 何か適当なサンプルプログラムでもあれば、それを元に何とかできるかもしれ
>ませんけど。例えばgoogleデスクトップ検索の時もそういうサンプルを元にして
>作りましたが。

先に挙げたページからですが、メールデータをインデックスに登録する処理と
検索する処理のサンプルコードは以下のようになります。

●メールデータをインデックスするサンプル
-----------------------------------------------------------------
#include <estraier.h>
#include <cabin.h>
#include <stdlib.h>
#include <stdio.h>

int main(int argc, char **argv){
  ESTDB *db;
  ESTDOC *doc;
  int ecode;

  /* データベースを開く */
  if(!(db = est_db_open("casket", ESTDBWRITER | ESTDBCREAT, &ecode))){
    fprintf(stderr, "error: %s\n", est_err_msg(ecode));
    return 1;
  }

  /* 文書オブジェクトを生成する */
  doc = est_doc_new();

  /* 文書オブジェクトに属性を追加する */
  est_doc_add_attr(doc, "@uri", "http://estraier.gov/example.txt");
  est_doc_add_attr(doc, "@title", "Over the Rainbow");
  est_doc_add_attr(doc, "from", "xxx@bbb.com");
  est_doc_add_attr(doc, "to", "xxx@dddd.com");
  /* その他、ヘッダを属性として追加することになると思います */

  /* 文書オブジェクトに本文を追加する */
  est_doc_add_text(doc, "Somewhere over the rainbow.  Way up high.");
  est_doc_add_text(doc, "There's a land that I heard of once in a lullaby.");

  /* 文書オブジェクトをデータベースに登録する */
  if(!est_db_put_doc(db, doc, ESTPDCLEAN))
    fprintf(stderr, "error: %s\n", est_err_msg(est_db_error(db)));

  /* 文書オブジェクトを破棄する */
  est_doc_delete(doc);

  /* データベースを閉じる */
  if(!est_db_close(db, &ecode)){
    fprintf(stderr, "error: %s\n", est_err_msg(ecode));
    return 1;
  }

  return 0;
}
-----------------------------------------------------------------
@uri 属性は必須で、かつドキュメント毎にユニークである必要があります。
秀丸メールですと、データのファイルとオフセット値を組み合わせたものがいいので
はないでしょうか。

●メールデータを検索するサンプル
-----------------------------------------------------------------
#include <estraier.h>
#include <cabin.h>
#include <stdlib.h>
#include <stdio.h>

int main(int argc, char **argv){
  ESTDB *db;
  ESTCOND *cond;
  ESTDOC *doc;
  const CBLIST *texts;
  int ecode, *result, resnum, i, j;
  const char *value;

  /* データベースを開く */
  if(!(db = est_db_open("casket", ESTDBREADER, &ecode))){
    fprintf(stderr, "error: %s\n", est_err_msg(ecode));
    return 1;
  }

  /* 検索条件オブジェクトを生成する */
  cond = est_cond_new();

  /* 検索条件オブジェクトに検索式を設定する */
  est_cond_set_phrase(cond, "rainbow AND lullaby");

  /* データベースから検索結果を得る */
  result = est_db_search(db, cond, &resnum, NULL);

  /* 各該当文書を取得して表示する */
  for(i = 0; i < resnum; i++){

    /* 文書オブジェクトを取得する */
    if(!(doc = est_db_get_doc(db, result[i], 0))) continue;

    /* 属性を表示する */
    if((value = est_doc_attr(doc, "@uri")) != NULL)
      printf("URI: %s\n", value);
    if((value = est_doc_attr(doc, "@title")) != NULL)
      printf("Title: %s\n", value);

    /* 本文を表示する */
    texts = est_doc_texts(doc);
    for(j = 0; j < cblistnum(texts); j++){
      value = cblistval(texts, j, NULL);
      printf("%s\n", value);
    }

    /* 文書オブジェクトを破棄する */
    est_doc_delete(doc);

  }

  /* 検索結果を破棄する */
  free(result);

  /* 検索条件オブジェクトを破棄する */
  est_cond_delete(cond);

  /* データベースを閉じる */
  if(!est_db_close(db, &ecode)){
    fprintf(stderr, "error: %s\n", est_err_msg(ecode));
    return 1;
  }

  return 0;
}
-----------------------------------------------------------------

上記のサンプルですと、「rainbow」と「lullaby」の両方の語を
含むメールを検索する、という処理になります。

あと、Hyper EstraierのJavaバインディングを使って作った、
秀丸メールのデータをインポートして検索するツールがあるんですけども、
そんなものでよろしければソースをお送りしますが、いかがいたしましょうか。

# GUIを手早く作りたかったので、Javaを選択してしまいました。(^_^;

[ ]
RE:09988 Hyper Estraierで全文検索なんてNo.09989
秀まるお さん 05/11/30 09:46
 
 googleデスクトップ検索用のプラグインというのがあるんですけど、それと同
じような仕組みで、Hyper Estraier用にインデックス化してもらうようなDLLを
別途用意して、それを秀丸メールが呼び出すって仕組みなら簡単に出来ます。

 問題は、検索の機能ってことになると思いますが。例えばGoogleデスクトップ
検索の場合だと、秀丸メールとは関係なく、ブラウザ上で検索を実行する形にな
ります。Hyper Estraierの場合も、そういう「検索用のソフト」みたいなのを別
途用意してそれで検索してもらうのが現実的かと思うんですが、どうでしょ?

 というか、そういうの作ってくれたりするって話ないですかね?

 Hyper Estraier用にインデックス化するDLLを作ってくれるとしたら、そのDLL
側で、

int _cdecl DoIndexingByMailData)( char* pszMailData, int cbMail, char* pszFo
lder );

 っていう関数をexportしてくれるだけで十分ですけど。

 どうでしょ?

 あるいは、とりあえずそういう仕組みを秀丸メール側に作りつつも、DLL側も
僕が作ってもいいんですが。検索を実行するプログラムだけは、ちょっと別ソフ
トとして、何か作ってくれると助かるかなぁと。あるはそういうソフトを別途用
意しなくても、estcmd.exeとかで検索できるのかなぁと思ったりもしますけど。

[ ]
RE:09989 Hyper Estraierで全文検索なんてNo.09990
nohhoso さん 05/12/01 01:02
 
nohhoso です。

検索するプログラムでしたら、一般的なデスクトップ検索用に私が作ってるアプリが
ありますので、それを流用してすぐに作れると思います。
(Javaなので実行にはJREがいりますが・・・)

Hyper Estraierでのインデキシングまでは秀丸メール側でしていただけるとありがた
いです。
と言いますのは、秀丸メール固有の情報を登録していただきたいからです。
特に、「メモ」は是非とも属性として登録していただきたいです。
それがあれば、「メモ」をラベルとして使用して、メールを分類することができます
ので・・・。

あとは、検索ツール側から、秀丸メールでのメールの選択ができるよう、
ファイル名とオフセット値も属性として登録していただきたいです。

インデックスを格納したフォルダのパスをレジストリに記録していただければ、
検索ツール側でそれを読み取って検索するようにいたします。

で、とりあえずは検索は外部アプリで検索するようにしつつ、
ゆくゆくはHyper Estraierを秀丸メールの内部で使用して
検索フォルダとかラベル分類機能を付ける、なんていかがでしょうか。(^_^;

[ ]
RE:09990 Hyper Estraierで全文検索なんてNo.09991
cuma さん 05/12/01 10:20
 
cumaです。
nohhoso様、秀まるお様 こんにちは
私は内容はよくわかりませんが、とても歓迎すべきお話だと感じます。
期待しております。

特に

>で、とりあえずは検索は外部アプリで検索するようにしつつ、
>ゆくゆくはHyper Estraierを秀丸メールの内部で使用して
>検索フォルダとかラベル分類機能を付ける、なんていかがでしょうか。(^
>_^;

すばらしい!!!!
と思います。

[ ]
RE:09991 Hyper Estraierで全文検索なんてNo.09992
秀まるお さん 05/12/01 11:40
 
 一応、Googleデスクトップ検索用の仕組みを応用して、TuruKameGDS.dllとは
別のDLLを呼び出せる仕組みだけ作ってみました。それに対応したDLLはまだ作っ
てませんが。

> @uri 属性は必須で、かつドキュメント毎にユニークである必要があります。

 絶対にドキュメント毎にユニークでなければないないとしたら、そういう属性
は秀丸メール内部には存在しないです。しいてやるなら、メールから32bit-CRC
でも生成させてやって、それを属性にするしか無いです。

 とりあえずそういうことでサンプルDLLも作ってみます。

[ ]
RE:09992 Hyper Estraierで全文検索なんてNo.09993
秀まるお さん 05/12/01 15:43
 
 サンプルDLLを作ってやってみましたけど、est_db_openからest_db_closeまで
の処理トータルで、僕のK6-2/500MHzマシンで0.8秒くらいかかりますね。

 メール1通受信する度に0.8秒待たされるようでは、ほとんど実用にならない
気がしますけど…。

 V4.60β3とセットでアップロードしたので、試してみて欲しいです。Hyper
Estraier用のdllも含めて秀丸メール本体のプログラム用フォルダと同じ所にイ
ンストールすれば使えると思います。

 「全般的な設定・上級者向け・google連携」の所でHmmEstraier.dllを指定し
てください。

[ ]
RE:09993 Hyper Estraierで全文検索なんてNo.09994
アルビレオ さん 05/12/01 16:32
 
アルビレオです。

最近はCRC-32より高速にチェエックサムを作成するAdler-32というアルゴリズム
もあります。
でもこれだけ遅いとチェックサムを高速化した程度では厳しいでしょうね。

サンプルコードつき解説
http://www.futomi.com/lecture/japanese/rfc1950.html

[ ]
RE:09994 Hyper Estraierで全文検索なんてNo.09995
秀まるお さん 05/12/01 16:45
 
 CRC32の計算は全然遅くないと思いますが、そういうアルゴリズムがあるとは
知りませんでした。参考情報ありがとうございます。

 今回のサンプルDLLが遅いのは明らかにHyper Estraierの処理なんですけど、
db_open/db_closeを頻繁に呼ばないようにすれば速くなるのかなぁと思いつつ、
とりあえずサンプルということで遅いままにしてしまいました。

 googleデスクトップ検索とかの場合は、とりあえずメールデータをキャッシュ
しておきつつ、パソコンがアイドルになったのを見計らってインデックス化する
ような仕組みになってます。そういう仕組みが無いと苦しいんじゃないかと思い
ます。

 しいて秀丸メール側でなんとかするとしたら、インデックス化用のバックグラ
ウンドスレッドを用意して、そこでループさせるとかって手はありますけど。そ
うすると、受信はとりあえず速く終わりつつ、後でずっとCPU使用率が100%にな
ったまま、重いのをがまんしてメールを閲覧するような形になるかもしれません。
というか、そこまでしてHyper Estraier対応するのもなんかなぁと思ったりしま
す。

[ ]
RE:09995 Hyper Estraierで全文検索なんてNo.09996
nohhoso さん 05/12/02 01:35
 
nohhoso です。

私も、est_db_openが遅いのだろうと思います。
書き込みモードでのオープン、クローズをメール一通ごとにしていては
時間がかかりそうです。

CreateIndexingInstance()とDestroyIndexingInstance()で
オープン/クローズすればいいかと思ったんですが、DestroyIndexingInstance()が
呼ばれるのは、アプリケーションの終了時なんですね。
これでは開きっぱなしになってしまいますし・・・。

秀丸メールのメールデータを解析してインデックスするプログラムを一つ作って、
マクロの自動起動の「受信が一段落したとき」で実行した方がいいんですかね。(^_^;

Hyper EstraierにはノードAPIというものもあって、こちらは
DBをオープンしっぱなしにせずにドキュメントの登録ができるんですが、
その代わりにサーバープロセスを起動することが必要になります。
これはこれで、プロセスの管理が難しそうです。

今日はVisualCのExpress Editionのセットアップで時間がかかってしまったので、
週末にソースをいじらせていただきます。

希望がまとまれば、また書き込みさせていただきます。

[ ]
RE:09996 Hyper Estraierで全文検索なんてNo.09997
秀まるお さん 05/12/02 10:38
 
 受信が一段落した時に何か関数を呼ぶようにすることは簡単に対応できるので、
とりあえずそうしてみます。そして、db_open/db_closeの回数を極力少なくする
ように直してみます。

> その代わりにサーバープロセスを起動することが必要になります。
> これはこれで、プロセスの管理が難しそうです。

 DLL内でCreateThreadしてそのスレッドにバックグラウンドでやらせるという
手も使えるかもしれませんが…。どっちにしてもここまでやるのはかなり大変で
す。

[ ]
RE:09997 Hyper Estraierで全文検索なんてNo.09998
nohhoso さん 05/12/03 15:40
 
nohhoso です。

文字列はUTF-8で登録しないといけないようだったので、そうしてみました。
あと、estcmd と動作を同じにして、すべてのヘッダを属性名は小文字で
登録するようにしました。

http://freemind.s57.xrea.com/HmmEstraier.zip

ただ、速度は遅いかもしれないです。
文字列を配列じゃなくて、std::stringで扱っているので。(^_^;

インデックスできることは確認しましたので、検索ツールを作ってみます。

[ ]
RE:09998 Hyper Estraierで全文検索なんてNo.10006
nohhoso さん 05/12/05 00:05
 
nohhoso です。

インデックスDLLで、セットする属性を追加してみました。
http://freemind.s57.xrea.com/HmmEstraier_20051204.zip

あと、とりあえずの検索ツールを作りました。
http://freemind.s57.xrea.com/HidemaruMailSearch_010.zip

JREが必要ですが、実行時にインストールされていなかったら、
インストールのWebページを開くようになってます。


[ ]
RE:10006 Hyper Estraierで全文検索なんてNo.10007
nohhoso さん 05/12/05 00:11
 
すみません、書き忘れてました。

検索ツールの文字列の書式は、こちらに書いてあります。
Googleデスクトップ検索とほぼ同じです。

http://freemind.s57.xrea.com/desktophe/howtouse.html

[ ]
RE:10007 Hyper Estraierで全文検索なんてNo.10011
秀まるお さん 05/12/05 12:48
 
 とりあえず僕自身はいろいろやることがあるのでテストはしないでおこうかな
ぁと思いますが…。

 次のβ版にて、DLL側がNotifyReceiveFinished関数をエクスポートしてればそ
れを呼び出すようにだけ修正させていただきます。

[ ]
RE:10011 Hyper Estraierで全文検索なんてNo.10017
nohhoso さん 05/12/07 01:12
 
nohhoso です。

秀丸メールとインデックスDLLのインターフェイスについて考えたのですが、
私としては次のような仕様が希望なのですが、いかがでしょうか。

DLLでエクスポートする関数

●int _cdecl DoIndexingByMailData( char* pszMailData, char* pszFile, int off
set )
メールデータをインデックスする関数

pszMailData: メールの文字列
pszFile: メールファイルのファイルパス
offset: ファイル中の該当メールの位置
返り値: 処理が正常に終了すれば0、それ以外の場合は1

●int _cdecl RemoveMailData( char* pszFile, int offset )
メールデータをインデックスから削除する関数

pszFile: メールファイルのファイルパス
offset: ファイル中の該当メールの位置
返り値: 処理が正常に終了すれば0、それ以外の場合は1

秀丸メールでは、
・メールを受信、送信したとき
・メールを操作したとき
 (別フォルダに移動、マークオン/オフ、メモの編集、等)
・メールを削除したとき
などに上記の関数を呼ぶようにしていただけると嬉しいのですが・・・。

これらの関数は処理は別スレッドで行い、関数はすぐに戻るようにします。
DLL内部で処理スレッドの優先度を下げておき、かつメール一件分を処理するごとに
Sleep(1); すれば、「後でずっとCPU使用率が100%になったまま、重い」と
いうことも防げるのではないかと思います。

今のインターフェイスですと、秀丸メール→検索ツール の一方通行ですので、
Googleデスクトップ検索などと比べてメリットがありません。
秀丸メール→検索ツール→秀丸メール という感じで、検索結果のメールを
秀丸メール側で選択できるようにしたいのです。
そのためには、このようなインターフェイスにしていただく必要があるかと
思いました。

すぐに対応いただくことが無理なのは存じておりますが、ご検討いただければ幸いで
す。

[ ]
RE:10017 Hyper Estraierで全文検索なんてNo.10020
秀まるお さん 05/12/07 13:48
 
 メールがどのファイルのどの位置(offset)に位置してるかの情報は、一定し
てないです。

 例えばaaaa.txtってファイルのオフセット100の所にメールがあったとしても、
そのファイル中のオフセット0の所のメールを削除すると、以前オフセット100だ
ったメールはオフセット0に移動したりします。

 なので、「ファイル名+オフセット」ではメールは特定できません。

> ●int _cdecl RemoveMailData( char* pszFile, int offset )
> メールデータをインデックスから削除する関数

 メールをコピーして2通に増やした所から、片方のメールを削除したとすると、
そのメールはまだ存在することになります。そうすると、このメール用のインデ
ックス情報も削除されたら困ります。

 なのでこういう仕組みを用意しても意味が無いです。

 あと、秀丸メールの場合は、簡単にメールが改変できてしまうという問題もあ
ります。

 結局は、googleデスクトップ検索みたいな感じで検索してもらうしか無いよう
な気がします。それか、サーチクロスみたいに独自でファイルのインデックス化
をするか。そうするとどっちみち秀丸メールとは別次元で動作してもらうことに
なります。

[ ]
RE:10020 Hyper Estraierで全文検索なんてNo.10021
nohhoso さん 05/12/07 21:06
 
nohhoso です。

すみません、私の説明が足りなかったようです。

> メールがどのファイルのどの位置(offset)に位置してるかの情報は、一定し
>てないです。
> 例えばaaaa.txtってファイルのオフセット100の所にメールがあったとしても、
>そのファイル中のオフセット0の所のメールを削除すると、以前オフセット100だ
>ったメールはオフセット0に移動したりします。

これについては承知しております。
メールを移動したときは、オフセット値の変わるメールすべてについて
RemoveMailData()を呼んでから、DoIndexingByMailData()を呼んでいただければと
考えておりました。
しかし、ややこしいですかね・・・。

では、このような仕様ではどうでしょうか。

DLLでエクスポートする関数

●int _cdecl NotifyMailFileChanged( char* pszFile )
メールファイルが新規作成、または変更されたことを通知する関数

pszFile: メールファイルのファイルパス
返り値: 常に1

●int _cdecl NotifyMailFileRemoved( char* pszFile )
メールファイルが削除されたことを通知する関数

pszFile: メールファイルのファイルパス
返り値: 常に1

●int _cdecl ClearIndex( void )
インデックスをクリアする関数

返り値: 常に1

メールの受信、送信、メモの編集、フォルダの移動など、メールファイルが
変更されたときにDLLに通知をいただければ、DLL側でファイルを解析して
インデックスしようと思います。
(C#でのメールファイルの解析プログラムは作ったことがあるので、
C++に書き直すのも難しくないと思います)
処理は別スレッドで行うようにし、関数のコールはすぐに戻るようにします。

NotifyMailFileChanged()が呼ばれたときは、そのファイルから取り込んだデータを
一旦すべて削除し、
再度解析してインデックスします。
ですので、メールを別のフォルダに移動をした場合は、元のファイルと
移動先のファイルの2つを引数として、2回コールしていただくことになります。
NotifyMailFileRemoved()が呼ばれたときは、単にそのファイルから読み取ったデー
タを削除します。

また、設定画面の「インデックスさせなおす!」をクリックしたときは、
ClearIndex()をコールしてから、全メールファイルに対して、
NotifyMailFileChanged()を呼んでいただければいいかと思います。

いかがでしょうか。
ご検討いただければ幸いです。

[ ]
RE:10020 Hyper Estraierで全文検索なんてNo.10022
nohhoso さん 05/12/07 21:12
 
nohhoso です。

すみません。補足です。
先ほどの私の案ですと、同一のメールが複数のフォルダにある場合(例えばメールを
送るときにBCCで自分のアドレスを入れている場合など)は、
その数だけインデックスされてしまうことになります。

私としては、検索ツール→秀丸メールの連携のためならば、
その程度は許容範囲かなぁと考えております。


[ ]
RE:10022 Hyper Estraierで全文検索なんてNo.10023
きいろいまふらあ さん 05/12/07 22:43
 
横から失礼します。

>先ほどの私の案ですと、同一のメールが複数のフォルダにある場合(例えばメールを
>送るときにBCCで自分のアドレスを入れている場合など)は、
>その数だけインデックスされてしまうことになります。

一方だけ削除したり改変したりすることもできるわけですから、それらは「同一
のメール」ではないのではないでしょうか?
逆に検索してそれらのうちの一部にしかヒットしないというのはいかがなものか
と思います。

なので「その数だけインデックスされる」のでよいんじゃないかと思います。

[ ]
RE:10023 Hyper Estraierで全文検索なんてNo.10024
nohhoso さん 05/12/08 00:50
 
きいろいまふらあ さん

ご意見ありがとうございます。
言われてみれば、そうですね。
一方のメールにだけメモを付けたり、マークをしたりするかもしれないわけで
両方ともインデックスされていい気がしてきました。(^_^)

[ ]
RE:10021 Hyper Estraierで全文検索なんてNo.10025
秀まるお さん 05/12/08 09:36
 
> メールを移動したときは、オフセット値の変わるメールすべてについて
> RemoveMailData()を呼んでから、DoIndexingByMailData()を呼んでいただければと
> 考えておりました。

 それは大変難しい話になります。Hyper Estraierだけのためにこんな面倒なこ
とは出来ません。だいたいにして、動作速度的にまったく実用にならないと思い
ます。例えばメール1通削除するたびにメール100通分くらいオフセットが移
動したとしたら、それのインデックス取り消し/再登録で、1通当たり0.6秒か
かるとしても、トータル1分固まることになります。

[ ]
RE:10025 Hyper Estraierで全文検索なんてNo.10026
nohhoso さん 05/12/09 01:32
 
> それは大変難しい話になります。Hyper Estraierだけのためにこんな面倒なこ
>とは出来ません。

了解いたしました。
上で第二案を提案させていただいていますが、そちらではいかがでしょうか。

>だいたいにして、動作速度的にまったく実用にならないと思い
>ます。例えばメール1通削除するたびにメール100通分くらいオフセットが移
>動したとしたら、それのインデックス取り消し/再登録で、1通当たり0.6秒か
>かるとしても、トータル1分固まることになります。

これも上に書きましたが、処理自体は別スレッドにして、DLLのコールは
すぐに返るようにいたします。
また、スレッドの生成時に優先度を低くしておき、かつ処理の合間に
Sleep()を呼んでCPUを占有しないようにしようと考えております。

・・・というか、そうなっていないと私も使いたくないです。(^_^;

ご検討いただければ幸いです。

[ ]
RE:10026 Hyper Estraierで全文検索なんてNo.10027
秀まるお さん 05/12/09 09:28
 
 なんとなく話が理解できてないんですけど、NotifyMailFileChanged()みたい
な関数でメール用ファイルが書き換えられたことを察知したい&実際のインデッ
クス化は後で行うってことならば、別に秀丸メールの力を借りずとも、自分でフ
ァイルのタイムスタンプを比較してインデックスの作成/破棄などすればいいん
じゃないでしょうか。つまり、サーチクロスとかGoogleデスクトップ検索とかと
同じ形の動作になりますけど。

 というか、僕が思うには、どっちみちインデックス化にはとんでもない時間が
かかると思うので、秀丸メール内での別スレッドでやるってのは無理があると思
います。というのは、別スレッドでやるとすると、秀丸メール終了と同時にその
スレッドも強制終了させられることになって、結果としてインデックス化が途中
で中断させられることになります。やるとしたら、別プロセスでってことになる
んじゃないかと思います。

 結局はGoogleデスクトップ検索とかサーチクロスとか、そういう形にせざるを
得ないと思います。Googleデスクトップ検索は、元のデータとの対応関係を捨て
る代わりにインデックス化を高速化してて、サーチクロスは対応関係を維持して
る代わりにインデックス化が遅いです。

------------
 っといろいろ書いても仕方がないですが、とりあえず僕としては、Googleデス
クトップ検索用に用意した仕組みを他のDLLさんが使えるようにって対応はしま
すけど、それ以上の対応はしたくありません。なので、nohhosoさんの方でも、
Googleデスクトップ検索のような、元のメールとの対応関係は不明のままで検索
するようなソフトを作るって前提で作業して欲しいです。

[ ]
RE:10027 Hyper Estraierで全文検索なんてNo.10028
秀まるお さん 05/12/09 09:42
 
 ちょっと違ってる点があるので修正させていただきますと…。

 googleデスクトップ検索の場合で、秀丸メールのプラグインに限っては、イン
デックス化の元のデータが削除されたり更新されたりしてもインデックスの更新
はされません。それに対してサーチクロスのようなソフトの場合は、ファイルが
更新されると、それに対応したインデックスが全部再計算されます。なので、
メールを移動したりコピーしたりするだけでインデックスが再計算されることに
なって、結果、インデックス化に時間がかかる、という意味です。

[ ]
RE:10028 Hyper Estraierで全文検索なんてNo.10029
nohhoso さん 05/12/10 00:49
 
nohhoso です。

長いスレッドになってしまってすみません。
MailScouterというツールで、秀丸メールのデータを検索できる
ツールを作ったことがあります。
なので、ファイルの更新を監視して、インデックスを更新するというのは
考えたことがあります。
ただ、監視の間隔が短いとシステムに負荷がかかりそうだし、長いとインデックスに
反映されるまでにタイムラグが生じそうだし、と悩んでおりました。
そのため、秀丸メールから通知がいただければと考えた次第です。

そのような対応は難しいということですので、インデックスを行うプログラムを作り、
マクロの自動起動の「受信が一段落したとき」に起動するという方法でやってみよう
と思います。

ですので、「Googleデスクトップ検索用に用意した仕組みを他のDLLさんが使えるよ
うに」という
ご対応は結構です。

お騒がせしてすみませんでした。m(_ _)m

[ ]