2009-04-15 4 views
4

사용 가능한 문서를 읽음으로써 최적의 성능을 위해 IndexSearcher 인스턴스를 검색 할 때 공유하고 새로운 인스턴스를 만들어야 변경 사항을로드해야 함을 알게되었습니다 색인 이것은 동일한 디렉토리를 가리키는 IndexSearcher의 인스턴스를 만든 후에 인덱스가 쓰기 가능하다는 것을 의미합니다 (IndexWriter 사용). 그러나 이것은 Lucene.Net의 구현에서 볼 수있는 동작이 아닙니다. FSDirectory를 사용하고 있습니다. RAMDirectory는 실행 가능한 옵션이 아닙니다. IndexSearcher는 인덱스 파일 중 하나를 잠급니다 (구현시 _1.cfs 파일입니다) IndexSearcher 인스턴스의 수명 동안 인덱스를 업데이트 할 수 없게 만듭니다.Lucene IndexSearcher가 인덱스 재 작성시 IOException을 야기 함

이것은 알려진 동작입니까? 다시 작성하기 전에 만든 IndexSearcher 인스턴스를 사용하는 동안 인덱스를 처음부터 다시 작성할 수 있습니까? 인덱스를 수정할 수는 있지만 인덱스를 다시 작성할 수는 없습니까? 내가 Lucene.Net 버전 2.0을 사용하고

var directory = FSDirectory.GetDirectory(storagePath, true); 
var indexWriter = new IndexWriter(directory, new StandardAnalyzer(), true); 

:

여기
// Create FSDirectory 
var directory = FSDirectory.GetDirectory(storagePath, false); 

// Create IndexReader 
var reader = IndexReader.Open(directory); 

// I get the same behaviour regardless of whether I close the directory or not. 
directory.Close(); 

// Create IndexSearcher 
var searcher = new IndexSearcher(reader); 

// Closing the reader will cause "object reference not set..." when searching. 
//reader.Close(); 

내가 IndexWriter를 만드는 방법은 다음과 같습니다 여기

내가 IndexSearcher 인스턴스를 생성하는 방법이다.

편집 :

업그레이드 Lucene.Net 2.1 (THX KenE) 약간 내 IndexWriter 문제 해결 만드는 방식 변경에 :

var directory = FSDirectory.GetDirectory(storagePath, false); 
var indexWriter = new IndexWriter(directory, new StandardAnalyzer(), true); 

답변

3

Lucene.Net의 최신 버전 (2.1)

http://incubator.apache.org/lucene.net/docs/2.1/Lucene.Net.Index.IndexWriter.html

이전 버전은 다음과 같습니다 열려 독자가있는 경우에도 = true를 만들와 함께 IndexWriter를 열고 지원하기 위해 나타납니다 그들이 이것을지지하는지 아닌지에 관해 명확하지 않다. 2.1을 사용해 보았습니다.

+0

답장을 보내 주셔서 감사합니다. 나는 그것을 시험해보고 그 버전이 약속 된 것을 지켜 볼 것이다. – Marcus

관련 문제