如何使用IndexSearcher以便它不会锁定索引并以只读模式打开它?
现在我只是
var searcher = new IndexSearcher(LuceneIndexPath);
我一直在阅读以只读模式打开提升性能,所以我想知道如何去做。我找不到关于这个主题的大量文档。
答案 0 :(得分:11)
如果这就是你所拥有的,那么你应该在以后担心性能。在您诉诸索引权限之前,这里有一些提示让您使用Lucene的提示:
确保首先解决这三个主要方面,您可能不需要担心性能问题。在解决这些问题之前担心性能将是众所周知的邪恶的“过早优化”之一。
答案 1 :(得分:4)
我最近读到了这一点,并想出了这样一种方式,以一种只读的方式使用索引搜索器,让读者在最短的时间内打开:
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);
});