如何使用IndexSearcher,以便它不鎖定索引並以只讀模式打開它?Lucene.NET只讀IndexSearcher
現在我只是有
var searcher = new IndexSearcher(LuceneIndexPath);
我一直在讀只讀模式打開提升性能,所以我不知道如何去做。我無法找到關於此主題的大量文檔。
如何使用IndexSearcher,以便它不鎖定索引並以只讀模式打開它?Lucene.NET只讀IndexSearcher
現在我只是有
var searcher = new IndexSearcher(LuceneIndexPath);
我一直在讀只讀模式打開提升性能,所以我不知道如何去做。我無法找到關於此主題的大量文檔。
如果這就是你的全部,那麼以後應該擔心性能。這裏有幾個技巧,讓你使用Lucene會再打索引權限擺弄前:
確保這三個主要方面首先解決,你可能並不需要擔心性能的不多。在這些問題得到解決之前擔心業績將是那些臭名昭着的「過早優化」之一。
我最近看了關於這一點,並用這種方式在只讀方式使用IndexSearcher的留給讀者開放最短的時間內想出了:
private T searchIndex<T>(Func<IndexSearcher, T> searchAction)
{
var indexReader = IndexReader.Open(_indexDirectory, true);
var indexSearcher = new IndexSearcher(indexReader);
var result = searchAction(indexSearcher);
indexSearcher.Close();
indexReader.Close();
return result;
}
耗時代碼看起來是這樣的
var hits = searchIndex(s=> {
var query = _queryParser.Parse(searchString);
return indexSearcher.Search(query);
});