ASP.NET で Lucene.Net を使用する場合、ある Web 要求がインデックスの更新をトリガーし、別の Web 要求が検索を実行していることが想像できます。Lucene.Net には、同時アクセスを管理する機能が組み込まれていますか?それとも、「別のプロセスによって使用されている」というエラーを回避するために管理する必要がありますか?
編集: ドキュメントと実験を読んだ後、これが私が学んだことだと思います: スレッドの安全性と同時実行性という 2 つの問題があります。マルチスレッドは、インデックスに悪いことを何もできないという点で「安全」です。ただし、一度に 1 つのオブジェクトがインデックスをロックするだけで安全です。2 番目のオブジェクトが来て、例外をスローします。したがって、検索を開いたままにして、別のスレッドのライターがインデックスを更新できると期待することはできません。また、スレッドがインデックスの更新でビジー状態の場合、サーチャーの作成は失敗します。
また、検索者は、インデックスを開いたときの状態でインデックスを見るので、インデックスを更新したままにしておくと、更新は表示されません。
検索者に最新の更新を見てもらいたかったのです。
私の設計は、これまでのところ機能しているように見えますが、現在の書き込みまたは検索が完了するまで、ライターとサーチャーが失敗しないようにロックを共有するというものです。