'Study'에 해당되는 글 22건

  1. 2012.10.05 Lucene - 2
  2. 2012.10.04 Lucene - 1
2012. 10. 5. 15:56

1. Lucene Setting을 위해 소스를 다운 받는다.(나중에 Luke와의 Setting을 위해 3.5 Version 다운)

   (http://grepcode.com/snapshot/repo1.maven.org/maven2/org.apache.lucene/lucene-core/3.5.0)

  

2. eclipse 환경에서 JAVA 프로젝트를 만들고,  Indexer.java 소스코드를 import 한다.

import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
import org.apache.lucene.analysis.Analyzer.*;
import org.apache.lucene.analysis.KeywordAnalyzer;
import org.apache.lucene.analysis.TokenStream;
//import org.apache.lucene.analysis.kr.KoreanAnalyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.Date;

public class Indexer {

  public static void main(String[] args) throws Exception {
 
  String idxPath = "D:\\IR\\index"; 
  String dataPath ="D:\\IR\\data";
 
    Directory idxDir = FSDirectory.open(new File(idxPath));
    File dataDir = new File(dataPath);
  
    long start = new Date().getTime();
    int numIndexed = 0;
    numIndexed = index(idxDir, dataDir);
    long end = new Date().getTime();

    System.out.println("Indexing " + numIndexed + " files took "
      + (end - start) + " milliseconds");
   
 }

 public static int index(Directory idxDir, File dataDir) throws IOException {

   System.out.println("index------------------------");
    int numIndexed = 0;
      if (!dataDir.exists() || !dataDir.isDirectory()) {
      throw new IOException(dataDir
      + " does not exist or is not a directory");
   }else{
    System.out.println("data dir exist~!!!");
    IndexWriterConfig conf = new IndexWriterConfig(Version.LUCENE_35, new KeywordAnalyzer() );
   
    System.out.println("conf----->"+conf.getAnalyzer());
    IndexWriter writer = new IndexWriter(idxDir, conf);
   
    indexDirectory(writer, dataDir);
    numIndexed = writer.numDocs();
      writer.optimize();
      writer.close();    
   }

   return numIndexed;
  }

  
  private static void indexDirectory(IndexWriter writer, File dir)
    throws IOException {

    File[] files = dir.listFiles();

    for (int i = 0; i < files.length; i++) {
      File f = files[i];
      if (f.isDirectory()) {
       System.out.println("f.isDirectory");
        indexDirectory(writer, f);  // recurse
      } else if (f.getName().endsWith(".txt")) {
       System.out.println(".txt ===========>"+f.getName());
        indexFile(writer, f);
      }
    }
  }

  private static void indexFile(IndexWriter writer, File f)
    throws IOException {

    if (f.isHidden() || !f.exists() || !f.canRead()) {
      return;
    }

    System.out.println("Indexing " + f.getCanonicalPath());

    Document doc = new Document();
    doc.add(new Field("contents", new InputStreamReader(new FileInputStream(f), "UTF-8")));//UTF-8 ·Î...
    doc.add(new Field("filename", f.getCanonicalPath(), Field.Store.YES,Field.Index.NO));
   // System.out.println("doc--->"+doc.toString());
    writer.addDocument(doc);
  }
}

 

3. JAVA 코드를 넣으면 오류가 나기 때문에, 오류를 해결하기 위해 jar파일을 넣어준다.

 

 

4. 이제 Run을 시키기 위해 Directory를 2개 만들고(data와 index), 하나 data쪽에는 txt파일을 만들고

   sample로 text파일을 넣어준다.

          

5. 결과 화면(자료를 수집한 모습)

'Study' 카테고리의 다른 글

[LINUX] OS bit 수 확인 방법, ulimit  (0) 2014.07.09
File I/O java  (0) 2014.05.15
Springframework  (0) 2012.11.28
Luke - 3  (0) 2012.10.05
Lucene - 1  (0) 2012.10.04
Posted by 아도니우스
2012. 10. 4. 19:41

Lucene 이란?

한 번쯤 들어본 사람들도 있겠지만, 검색엔진을 개발하고 다루는 것을 말한다.

그럼 검색이란 무엇인가?

찾는 것의 기본이 되는 Index '색인'이라는 것에서부터 시작된다.

그리고, 또한 검색(Search)분석(Analysis)에 대한 내용이 중요하다고 생각한다. 먼저, 검색은 결과의 순서같은 Sorting 하는 방법을 포함한다.

다음으로, 분석은 Google에서 개발된, 동의어 분석기 및 유사 발음 분석기와 같은 것을 말한다.

 

Lucene은 확장 가능한 고성능 정보검색(IR, Information Retrieval) 라이브러리

그리고, 독립 프로그램이 아닌 단순한 소프트웨어 라이브러리, 즉 다시 말해, 일종의 검색 툴박스

위에서 말한 색인과 검색은 Lucene이 잘 처리해주지만 'Business Logic'부분은 Lucene이 포함되어 있지 않으므로 작성해야 한다.

 

그럼 또 다시 색인은 무엇일까? 왜 Lucene이라는 엔진에 포함이 될까?

검색 이전에 각각의 대상 파일을 한번식 읽어가면서 단어를 포함하는 문서를 찾기 위한 특별한 구조의 데이터를 만들어 저장한다.

이런 과정을 '색인한다(indexing)'고 한다. 이런 과정과 절차를 통해 만들어진 특별한 구조의 데이터를 '색인(index)'라고 한다.

 

 

'Study' 카테고리의 다른 글

[LINUX] OS bit 수 확인 방법, ulimit  (0) 2014.07.09
File I/O java  (0) 2014.05.15
Springframework  (0) 2012.11.28
Luke - 3  (0) 2012.10.05
Lucene - 2  (0) 2012.10.05
Posted by 아도니우스