본문 바로가기

Lucene

[Lucene] IndexWriter.updateDocument

Lucene에서 indexWriter.updateDocument는 

Term에 해당하는 document를 바로 update하는 것이 아니고

delete 후 insert 로직으로 작동합니다.


즉, id=2인 document를 update 하려고 했을때, 인덱스에 id=2인 document가 없다면

업데이트를 하려고했던 document가 insert가 됩니다.






간단한 테스트케이스를 보시면..

처음에 id=1인 문서를 색인하고(addDocument) 그 이후에 id=1인 term query로 update를 합니다.


update 후 id=1로 검색을 한 결과를 보면 아래와 같이

Assert.assertTrue(topDocs.totalHits == 1);

Assert.assertEquals("document 1 update", indexSearcher.doc(topDocs.scoreDocs[0].doc).get("title"));


update된 문서를 보실 수 있습니다.

그 이후에 id=2인 document를 id=2인 term query로 update를 하게 되면 기존 인덱스에는 id=2인 term으로 검색되어 나오는 document가 없기 때문에, id=2인 document가 insert가 됩니다.


id=2로 검색을 해보면 아래와 같은 결과를 얻습니다.

Assert.assertTrue(topDocs.totalHits == 1);

Assert.assertEquals("document 2 update", indexSearcher.doc(topDocs.scoreDocs[0].doc).get("title"));


그리고 당연히 전체 document 개수는 2개가 되어있겠죠.

topDocs = indexSearcher.search(new MatchAllDocsQuery(), 10);

Assert.assertTrue(topDocs.totalHits == 2);