2014-01-08 2 views
1

Lucene.NET (4.0) 색인에 문서가 이미 있는지 확인하고 싶습니다. this post에서 다음 코드를 사용해 보았습니다.Lucene.NET - 문서가 색인에 있는지 확인하십시오.

IndexReader reader; 
Term indexTerm = new Term("filepath", "C:\\my\\path"); 
TermDocs docs = reader.TermDocs(indexTerm); 
if (docs.Next()) 
{ 
    continue; 
} 

그러나 reader이 지정되지 않았습니다. 나는 이것을 많이 봤고 Lucene.NET 4에서 작동하는 대답을 찾을 수 없다.

편집 : IndexReader은 추상 클래스입니다. 이 문서에서는 IndexReader.Open()Lucene.Net.Store.Directory으로 매개 변수로 호출하지만 자체는 추상이라고 말합니다. 코드 샘플은 마치 사용하지 않는 것처럼 사용합니다. 또한, 게시물에 나는 사용자에게 링크 된 코드의 첫 번째 세그먼트를 말했다.

EDIT2 : 이제 컴파일하는 코드가 있습니다.

bool exists = false; 
IndexReader reader = IndexReader.Open(Lucene.Net.Store.FSDirectory.Open(lucenePath), false); 
Term term = new Term("filepath", "\\myFile.PDF"); 
TermDocs docs = reader.TermDocs(term); 
if (docs.Next()) 
{ 
    exists = true; 
} 

파일 myFile.PDF이 분명히 존재하지만, 항상 다시 거짓 제공 : 여기있다. 내가 디버그 docs을 볼 때, 그 DocFreq 속성들은 " 'System.NullReferenceException'형식의 예외를 던졌다 상태.

+0

[Lucene.NET - 문서가 색인에 있는지 확인 중일 수 있습니다.] (http://stackoverflow.com/questions/20993676/lucene-net-checking-if-document-exists-in-index) – DIF

답변

2

당신은 아무것도 할 reader을 설정하지 않았습니다. 당신은 그것을 사용하기 전에 초기화해야합니다. 당신에게

IndexReader reader = IndexReader.Open(indexDirectoryPath); 

나 :

Directory directory = FSDirectory.Open(indexDirectoryPath); 
IndexReader reader = IndexReader.Open(directory); 

나 :

0123을이 작업을 수행 할 수있는 것은 다음을 사용하여 인덱스의 경로가있다
DirectoryInfo directoryInfo = new DirectoryInfo(indexDirectoryPath); 
Directory directory = FSDirectory.Open(directoryInfo); 
IndexReader reader = IndexReader.Open(directory); 

모든 경우에 indexDirectoryPath은 인덱스 위치의 전체 경로 인 string입니다. 사용하는 방법은 사용중인 Lucene.Net의 버전에 따라 다릅니다.

또한 완료 한 후 (reader.Close()에 전화하여) 판독기를 닫아야합니다. 그렇지 않으면 파일 잠금 문제가 발생할 수 있습니다.

+0

IndexReader. Open()에는 문자열 만 사용하는 오버로드가 없습니다. 내게는 5 개의 과부하가 있는데, 그 중 하나는 자체적으로 인스턴스화 할 수없는 Lucene.Net.Store.Directory()를 허용합니다. 나는 원래의 게시물을 더 자세히 편집했다. –

+0

@ JohnSmith : 업데이트 된 답변보기 – adrianbanks

+0

도움 주셔서 감사합니다 애드리안. 컴파일 된 코드가 있지만 여전히 어려움이 있습니다. 나는 그 질문을 갱신했다. –