본문 바로가기

Lucene

IndexReader.isCurrent()


IndexReader에 대해서..

색인이 되어 있는 인덱스 파일이 있습니다.

이것을 IndexReader를 사용해서 IndexSeacher를 생성하겠습니다.
Directory directory = FSDirectory.getDirectory("D:/lucene_data/luceneIndex/test");
reader = IndexReader.open(directory);
searcher = new IndexSearcher(reader);
System.out.println("reader current : " + reader.isCurrent());
view raw 1.java hosted with ❤ by GitHub

이때 reader.isCurrent()의 값은 true입니다.

이 상태에서 같은 인덱스 파일이 있는 디렉토리에 다시 색인을 해보겠습니다.
public static void index() throws Exception {
String path = "D:/lucene_data/luceneIndex/test";
String[] samples_field = {"spring"};
Directory dir = FSDirectory.getDirectory(path);
IndexWriter writer = new IndexWriter(dir,new StandardAnalyzer(),true,MaxFieldLength.LIMITED); Document document = null;
for(int i = 0; i < samples_field.length; i++) {
document = new Document();
Field field = new Field("name",samples_field[i],Field.Store.YES,Field.Index.ANALYZED,Field.TermVector.WITH_POSITIONS_OFFSETS);
document.add(field);
writer.addDocument(document);
}
writer.commit();
writer.optimize();
writer.close();
}
view raw 2.java hosted with ❤ by GitHub

위 메서드를 이용해서 다시 색인하고 reader.isCureent()를 다시 확인해보면
public static void readerCurrent() throws Exception {
Directory directory = FSDirectory.getDirectory("D:/lucene_data/luceneIndex/test");
reader = IndexReader.open(directory);
searcher = new IndexSearcher(reader);
System.out.println("reader current : " + reader.isCurrent());
index();
System.out.println("reader current : " + reader.isCurrent());
}
view raw 3.java hosted with ❤ by GitHub

결과는 false가 나옵니다.

새롭게 작성된 인덱스 파일이 존재하기 때문입니다.

IndexWriter를 생성 할 때 생성자에 들어가는 3번째 인자가
인덱스 파일을 지우고 새로 생성하느냐 아니면 추가되는 document를 append 하느냐를 나타냅니다.
(true면 새로 생성)

IndexWriter writer = new IndexWriter(dir,new StandardAnalyzer(),false,MaxFieldLength.LIMITED);

저 값이 true건 false이건 상관없이 새로 IndexWriter를 통해 인덱스 파일을 건드리게 되면
reader.isCurrent()는 false를 return합니다.