2012-03-16 6 views
1

필자의 경우 lucene 색인에 삽입 된 모든 문서는 고유 한 ID를 가지고 있습니다. 새 문서를 lucene 색인에 추가 할 때 문서가 색인에 존재하면 색인에 문서를 삽입하면 안됩니다. 이 전략을 구현하는 방법은 무엇입니까?
lucene이 문서를 찾을 수 없다면 먼저 docId로 문서를 검색 한 다음 삽입해야한다고 생각합니다. 그러나 색인을 생성 할 유일한 indexWriter를 공유하는 3 개의 스레드가 있기 때문에 잘못된 경우가있을 것입니다. 예를 들어 thread 1과 thread 2가 같은 docId를 가지는 2 개의 문서를 처리하고있는 경우, thread1가 docId를 검색해 아무것도 발견하지 않은 경우는, 문서를 인덱스에 삽입 할 수 있습니다 만, thread1가 인덱스를 읽은 후에 thread2는 그 문서를 인덱스에 삽입 할 수 있습니다. 결과적으로 색인에 두 개의 문서가 있습니다. 어떻게 이것을 피할 수 있습니까?lucene : 중복없이 문서를 추가하는 방법

답변

5

IndexWriter.updateDocument은 용어를 기반으로 문서를 원자 적으로 삭제하고 추가합니다.

+0

시나리오를 처리하는 방법 - 문서가 발견 된 경우 문서가 업데이트되지 않고 발견되지 않은 경우 업데이트하지 않습니다. [내 질문을 참조하십시오] (http://stackoverflow.com/questions/39653209/how-to-avoid-duplicate-document-indexing-in-lucene-6-0). 나는 시나리오가 누락 된 것이 아닌지 잘 모르겠다 - 가장 자연스러운 상황은 문서가 키를 찾을 수 없을 때 업데이트하는 것 같다. 모든 필드를 문서 키로 조합했습니다. –

+0

내가 구현할 것을 부탁하는 것은 1. 들어오는 문서가 존재하고 기존의 것보다 변경되지 않은 경우 - 아무것도하지 말라 2. 문서가 존재하고 기존의 것보다 바뀌면 - 업데이트 문서 3. 문서가 존재하지 않는다면 - add 문서. –

관련 문제