lucene_색인 만들기

2418 단어

색인 만들기


문서의 인덱싱을 위해 Lucene은 Document, Field, IndexWriter, Analyzer, Directory 등 다섯 가지 기본 클래스를 제공합니다.다음은 다섯 가지 유형의 용도에 대해 살펴보겠습니다.
Document
Document는 문서를 설명하는 데 사용됩니다. 이 문서는 HTML 페이지, 전자메일, 또는 텍스트 파일을 가리킬 수 있습니다.하나의 Document 객체는 여러 개의 Field 객체로 구성됩니다.하나의 Document 대상을 데이터베이스에 기록된 것으로 상상할 수 있으며, 각각의 Field 대상은 기록된 필드이다.
Field
Field 객체는 한 문서의 등록 정보를 설명하는 데 사용됩니다. 예를 들어 이메일의 제목과 컨텐트는 두 개의 Field 객체로 각각 설명할 수 있습니다.
Analyzer
문서가 인덱스되기 전에 먼저 Analyzer가 문서 내용을 분사 처리해야 합니다.Analyzer 클래스는 여러 가지 구현이 있는 추상 클래스입니다.다양한 언어와 애플리케이션에 적합한 Analyzer 를 선택해야 합니다.Analyzer는 분사 후의 내용을 인덱스에 넘겨 색인을 만듭니다.
IndexWriter
IndexWriter는 루틴이 색인을 만드는 데 사용하는 핵심 클래스입니다. 루틴의 역할은 하나의 Document 대상을 색인에 추가하는 것입니다.
Directory
이 클래스는 루틴의 인덱스가 저장된 위치를 나타낸다. 이것은 추상적인 클래스로 현재 두 가지가 실현되고 있다. 첫 번째는 FSDirectory이다. 이것은 파일 시스템에 저장된 인덱스의 위치를 나타낸다.두 번째는 RAMDIrectory입니다. 메모리에 저장된 인덱스의 위치를 표시합니다.
public class TxtFileIndexer { 
     public static void main(String[] args) throws Exception{ 
     //indexDir is the directory that hosts Lucene's index files 
     File   indexDir = new File("D:\\luceneIndex"); 
     //dataDir is the directory that hosts the text files that to be indexed 
     File   dataDir  = new File("D:\\luceneData"); 
     Analyzer luceneAnalyzer = new StandardAnalyzer(); 
     File[] dataFiles  = dataDir.listFiles(); 
     IndexWriter indexWriter = new IndexWriter(indexDir,luceneAnalyzer,true); 
     long startTime = new Date().getTime(); 
     for(int i = 0; i < dataFiles.length; i++){ 
          if(dataFiles[i].isFile() && dataFiles[i].getName().endsWith(".txt")){
               System.out.println("Indexing file " + dataFiles[i].getCanonicalPath()); 
               Document document = new Document(); 
               Reader txtReader = new FileReader(dataFiles[i]); 
               document.add(Field.Text("path",dataFiles[i].getCanonicalPath())); 
               document.add(Field.Text("contents",txtReader)); 
               indexWriter.addDocument(document); 
          } 
     } 
     indexWriter.optimize(); 
     indexWriter.close(); 
     long endTime = new Date().getTime(); 
        
     System.out.println("It takes " + (endTime - startTime) 
         + " milliseconds to create index for the files in directory "
         + dataDir.getPath());        
     } 
}

좋은 웹페이지 즐겨찾기