본문 바로가기

IndexReader

[Lucene] 3.5 IndexReader reopen이 deprecated 되었습니다. NearRealTimeSearch를 구현하는데 사용되던 메서드인 IndexReader reopen 메서드가 deprecated되고 static openIfChanged(IndexReader ir) 메서드로 대체 되었습니다. IndexReader newReader = IndexReader.openIfChanged(oldReader); oldReader가 변경되었다면 새로운 Reader를 반환하고 아니라면 null을 반환합니다. 이때 oldReader와 동일한 타입이 넘어옵니다. MultiReader라면 MultiReader가 넘어오게 됩니다. 더보기
IndexReader.isCurrent() IndexReader에 대해서.. 색인이 되어 있는 인덱스 파일이 있습니다. 이것을 IndexReader를 사용해서 IndexSeacher를 생성하겠습니다. 이때 reader.isCurrent()의 값은 true입니다. 이 상태에서 같은 인덱스 파일이 있는 디렉토리에 다시 색인을 해보겠습니다. 위 메서드를 이용해서 다시 색인하고 reader.isCureent()를 다시 확인해보면 결과는 false가 나옵니다. 새롭게 작성된 인덱스 파일이 존재하기 때문입니다. IndexWriter를 생성 할 때 생성자에 들어가는 3번째 인자가 인덱스 파일을 지우고 새로 생성하느냐 아니면 추가되는 document를 append 하느냐를 나타냅니다. (true면 새로 생성) IndexWriter writer = new Ind.. 더보기
[lucene] IndexReader reopen. 루씬에서 IndexReader와 IndexSearcher 그리고 IndexWriter는 보통 하나의 인덱스 파일을 바라보며 작업을 합니다. 그리고 서로가 인덱스파일의 상태를 공유하지 못 합니다. 기본적으로 읽기/쓰기 등에 대해서 한꺼번에 작업이 일어나지 못 하도록 Lock 기능을 보유하고 있긴 하지만 IndexWriter가 인덱스 파일에 Document를 추가하고 commit을 시켰다고 해서 그 내용이 바로 IndexReader나 IndexSearcher에게 영향을 미치지 못 합니다. 하지만 검색 서비스를 위해서는 항상 일명 전체색인만으로 서비스를 제공할 수 있는 경우는 거의 없습니다. 증분색인 혹은 실시간 색인을 통해 일정 주기마다 변경되는 사항을 인덱스 파일에 반영 할 필요가 있습니다. 이것은 Ind.. 더보기
[lucene] IndexReader를 사용한 Term 리스트 얻기. 루씬 메일링 리스트에서 쓸만한 내용이 있기에 정리해봅니다. 문의 내용은 내가 가진 인덱스에서 유니크한 키워드 목록을 얻고 싶은데 방법을 알려달라는 것이었구요.. 간략한 대답이었습니다. IndexReader.terms();를 사용 하면 된다고.. Termenum을 리턴하기 때문에 Termenum.next()와 Termenum.term()을 사용하면 Term의 리스트를 얻을 수 있고 더불어서 IndexReader.docFreq(Term) 메서드를 함께 사용하면 빈도수도 같이 얻을 수 있겠습니다. 한글 Analyzer로 인덱싱 후 어느 키워드가 많이 사용되었는지.. 잘 사용되었는지... 등을 확인할때 좋을듯 합니다. 더보기