2008-10-13 2 views
7

삭제하고 싶습니다. 모두 이전에 생성 된 색인을 삭제하고 싶습니다. 나는 Lucene.net을 사용하고있다.Lucene.net의 모든 색인을 삭제하십시오.

Term term = new Term(); //empty coz i want to delete all the indices 
IndexReader rdr = IndexReader.Open(_directory); 

rdr.DeleteDocuments(term); 
rdr.Close(); 

하지만 난 오류가 발생합니다 :

나는 다음 시도했다. 그것에 대해 어떤 생각을 가졌습니까?

답변

16

색인을 삭제하는 가장 좋은 방법은 파일 시스템 디렉토리를 지우는 것입니다. 그러나 인덱스를 다시 생성 할 필요가없는 경우 create 매개 변수를 true로 새 인덱스 작성기를 여는 것이 가장 쉬운 방법입니다. 기존 인덱스의 내용을 삭제하는 새로운 인덱스가 시작됩니다.

1

Jokin이 말한 것처럼 가장 쉬운 방법은 디렉토리 내의 모든 파일을 삭제하는 것입니다. 즉; Lucene.Net API Doc에서

DirectoryInfo directoryInfo = new DirectoryInfo(@"IndexLocation"); 
Parallel.ForEach(directoryInfo.GetFiles(), file => { 
      file.Delete(); 
     }); 
0

:

public static IndexReader Open(Directory);

전문가 : 사용자 정의 IndexDeletionPolicy으로, 주어진 디렉토리에 인덱스를 읽는 IndexReader 읽기/쓰기를 돌려줍니다. 참고 : 3.0에서 시작하면 readOnly IndexReader가 반환됩니다. 색인이 손상되면 CorruptIndexException을 던집니다. 저레벨의 IO 에러가 발생했을 경우는 IOException를 Throw합니다.

내가 스레드가 내가 그것을 대답을하는 것이 좋습니다 생각 오래된하지만 당신이

IndexReader rdr = IndexReader.Open(_directory, true); 
6

을 시도해야 같아요 .. 다른 사람을 위해 유용 할 수 있습니다. IndexWriter의 deleteAll() 메서드를 사용하여 인덱싱 된 모든 문서를 삭제할 수 있습니다.

관련 문제