사용 가능한 문서를 읽음으로써 최적의 성능을 위해 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);
답장을 보내 주셔서 감사합니다. 나는 그것을 시험해보고 그 버전이 약속 된 것을 지켜 볼 것이다. – Marcus