0

次のコードスニペットに関連する私の質問:

  static void Main(string[] args)
{
    Lucene.Net.Store.Directory d = FSDirectory.Open(new DirectoryInfo(/*my index path*/));
    IndexWriter writer = new IndexWriter(d, new WhitespaceAnalyzer());

    //Exiting without closing the indexd writer...
}

このテストでは、IndexWriterを閉じずに開いたので、テストが終了した後も、write.lockファイルはインデックスディレクトリに残っているので、次にそのインデックスに対してIndexWriterのインスタンスを開くとLockObatinFailedException、投げられる。誰かが私になぜ私が間違っているのか説明してもらえますか?つまり、write.lockファイルの意味は、同じプロセスでのみ2つのIndexWriterの作成を保護することですか?それは私には正しい答えではないようです...

4

1 に答える 1

2

コードを次のように変更すると、そのIndexWriterコンストラクターにバグがあるようです。

IndexWriter writer = new IndexWriter("Path to index here", new WhitespaceAnalyzer());

例外が発生します。

ロックファイルは、2つのIndexWriterが同じプロセスにあるかどうかに関係なく、同じインデックスで開かれるのを防ぐために使用されます。あなたはそこで例外を期待するのは正しいです。

于 2012-09-04T15:53:01.047 に答える