LINQ to Lucene の適切な使用パターンは何Index<T>
ですか?
実装するIDisposible
ので、using ステートメントでラップするのが最も理にかなっていると思いました。
IEnumerable<MyDocument> documents = null;
using (Index<MyDocument> index = new Index<MyDocument>(new System.IO.DirectoryInfo(IndexRootPath)))
{
documents = index.Where(d => d.Name.Like("term")).ToList();
}
ディスク上のインデックスが不要に削除されることがあります。インデックスの複数のインスタンスが同時に存在する場合、100% の確率で発生するようです。PLINQ を使用して 2 つの検索を並行して実行するテストを作成しました。1 つの検索は機能しますが、インデックスが空であるため、もう 1 つの検索は 0 の結果を返します。
- 代わりに単一の静的インスタンスを使用することになっていますか?
- でラップする必要があり
Lazy<T>
ますか? - 複数のユーザーが同時に静的インデックスにアクセスすると、他の問題が発生する可能性がありますか?
また、Windows サービスなどの別のプロセスを使用して、必要に応じて定期的にインデックスを再作成したいと考えています。インデックスの再構築中にユーザーが検索を行った場合、問題が発生することはありますか?