IndexReader에 대해서..
색인이 되어 있는 인덱스 파일이 있습니다.
이것을 IndexReader를 사용해서 IndexSeacher를 생성하겠습니다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Directory directory = FSDirectory.getDirectory("D:/lucene_data/luceneIndex/test"); | |
reader = IndexReader.open(directory); | |
searcher = new IndexSearcher(reader); | |
System.out.println("reader current : " + reader.isCurrent()); |
이때 reader.isCurrent()의 값은 true입니다.
이 상태에서 같은 인덱스 파일이 있는 디렉토리에 다시 색인을 해보겠습니다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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(); | |
} |
위 메서드를 이용해서 다시 색인하고 reader.isCureent()를 다시 확인해보면
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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()); | |
} |
결과는 false가 나옵니다.
새롭게 작성된 인덱스 파일이 존재하기 때문입니다.
IndexWriter를 생성 할 때 생성자에 들어가는 3번째 인자가
인덱스 파일을 지우고 새로 생성하느냐 아니면 추가되는 document를 append 하느냐를 나타냅니다.
(true면 새로 생성)
IndexWriter writer = new IndexWriter(dir,new StandardAnalyzer(),false,MaxFieldLength.LIMITED);
저 값이 true건 false이건 상관없이 새로 IndexWriter를 통해 인덱스 파일을 건드리게 되면
reader.isCurrent()는 false를 return합니다.