2011-05-12 10 views
2

나는 이것을 배우기 위해 프로젝트를 인계받습니다. 이 프로젝트는 Lucence.NET을 사용합니다. 나는 또한이 기능이 맞는지 아닌지 잘 모른다. 어쨌든, 인스턴스 오전 : 특정 문서에 대한Lucene.NET - IndexWriter를 사용하여 문서를 삭제할 수 없습니다.

var writer = new IndexWriter(directory, analyzer, false); 

를, 내가 전화 해요 : 결국

writer.DeleteDocuments(new Term(...)); 

, 나는 보통 writer.Optimize()를 호출하고있어, writer.Commit을() , writer.Close().

Term 개체의 필드는 Guid이며 문자열 (.ToString ("D"))로 변환되며 Field.Store.YES 및 Field.Index.NO를 사용하여 문서에 저장됩니다.

그러나 이러한 설정을 사용하면 이러한 문서를 삭제할 수 없습니다. 목표는 삭제 한 다음 업데이트 된 버전을 추가하는 것이므로 동일한 문서의 사본이 생성됩니다. 필요한 경우 더 많은 코드/설명을 제공 할 수 있습니다. 어떤 아이디어? 감사.

답변

7

필드의 색인을 생성해야합니다. 필드의 색인이 생성되지 않으면 해당 용어가 열거 형에 표시되지 않습니다.

+0

조금 더 연구를 한 후에이 사실을 깨닫고 테스트했습니다. 열을 인덱싱하고 다시 작성 했으므로 문서가 올바르게 삭제됩니다. 감사. –

+0

같은 문제가 나타 났지만 "필드를 인덱싱해야 함"이라는 의미를 이해하지 못합니다. 분명히 해줄 수 있니? –

4

작가를 어떻게 다루는 지 문제가 있다고 생각하지 않습니다.

DeleteDocuments에 전달하는 용어가 문서를 반환하지 않는 것처럼 들립니다. 동일한 용어를 사용하여 쿼리를 실행하여 결과가 반환되는지 확인하려고 했습니까? 당신의 목표는 간단 다시 문서 인 경우

또한, 당신은 UpdateDocument를 호출 할 수

//  Updates a document by first deleting the document(s) containing term and 
//  then adding the new document. The delete and then add are atomic as seen 
//  by a reader on the same index (flush may happen only after the add). NOTE: 
//  if this method hits an OutOfMemoryError you should immediately close the 
//  writer. See above for details. 

당신은 또한 (http://simplelucene.codeplex.com) SimpleLucene을 체크 아웃 할 수 있습니다 -이 있습니다 기본적인 Lucene 작업을 조금 더 쉽게 할 수 있습니다.

[업데이트] @Shashikant Kore가 맞지 않았는지 확실하지 않은 경우 필드가 색인 생성되었는지 확인해야합니다. 그렇지 않으면 검색어가 아무 것도 반환하지 않습니다.

+0

두 분 모두에게 신용을 줄 수는 없습니까? –

관련 문제