2011-10-07 4 views
4

Lucene 색인에서 문서를 삭제 한 다음 나중에 다시 추가 할 필요가 있습니다. 문서를 삭제 된 것으로 표시 한 다음 다시 추가하려고하면 문서가 삭제 된 채로 남아있는 것 같습니다. 어떻게 문서를 "삭제 취소"할 수 있습니까? 내가 그것을 어떻게 할 것 .. 다시이 문서를 "활성화"좋아하면 그래서Lucene.net 색인에서 문서의 삭제를 취소 할 수 있습니까?

Term = new Tearm("id", Id.Value); 
    IndexSearcher.reader.DeleteDocuments(term); 
    IndexSearcher.reader.Close(); 

:

이 내가 "삭제"와 같은 문서를 표시하고 어떻게?

감사합니다.

+0

Lucene.Net의 아주 오래된 버전을 사용하는 것 같습니다 (요즘 사람들은 IndexWriter의 Delete 메서드를 사용합니다) 어떤 버전을 사용합니까? –

+0

버전 2.0.0.4를 사용하고 있습니다. IndexWriter에 Delete 메서드가 있다는 것을 알지 못했습니다. 이 삭제는 실제로 문서를 삭제합니까 아니면 삭제 된 것으로 표시합니까? – Nick

+0

A) 아니요 2.0.0.4의 IndexWriter에 Delete 메서드가 없습니다. 올바르게 기억한다면 2.3.1에 소개되었습니다. B)'아니면 그냥 삭제 된 것으로 표시합니까? 이것은 모든 (AFAIK) DB와 검색 ​​엔진이 작동하는 방식입니다. 제 생각에는 2.9.2 또는 2.9.4로 업그레이드 한 후 질문을 다시 제기하는 것이 더 좋을 것 같습니다. –

답변

1

Lucene.Net에는 익숙하지 않지만 Java 버전에는 IndexReader.undeleteAll() 메서드가 있습니다.

Lucene의 삭제는 소프트 삭제입니다. 즉, 문서가 삭제되면 삭제 표시가됩니다. 색인이 최적화 된 경우에만 삭제 된 문서가 색인에서 제거됩니다. . 서 목록은 색인 디렉토리의 .del 파일에서 유지 보수됩니다. undeleteAll() 메서드는 파일의 내용을 제거하여 해당 문서를 다시 활성화합니다. 이 파일에 대한 참조가 인덱스 세그먼트 파일에서 유지 관리되므로이 파일을 수동으로 삭제하지 마십시오.

문서의 하위 집합을 복구 할 수 없습니다. 모든 문서의 삭제를 취소해야합니다. 삭제 된 모든 문서의 목록을 가져 와서 undeleteAll()을 호출하고 보존하려는 문서 이외의 문서를 다시 삭제하여 필요한 기능을 에뮬레이트 할 수 있습니다.

+0

삭제 된 문서의 색인을 쿼리 할 수 ​​있습니까? – Nick

+0

인덱스의 모든 문서 ID를 반복하고 삭제되었는지 확인할 수 있습니다. 다음은 IndexReader의 관련 API입니다. http://lucene.apache.org/java/3_0_1/api/core/org/apache/lucene/index/IndexReader.html#isDeleted(int) –

1

문서를 삭제하지 않는 것이 좋지만 삭제 된 것으로 표시하고 해당 필드를 쿼리에서 필터링하는 필드를 추가하는 것이 좋습니다. 다른 사람이 양식 삭제 된 문서를 요청하지 않는 한 쉽게 표시 할 수 있습니다.

관련 문제