Lucene 3.0 인덱스

7114 단어 Lucene3
1 역 색인    역 배열 색인 은 실제 응용 을 만족 시 키 기 위해 디자인 된 데이터 구조 이다.역 열 색인 의 모든 요 소 는 색인 항목 입 니 다. 모든 색인 항목 은 키워드 속성 값 과 키워드 관련 결과 또는 기 록 된 저장 주소 로 구성 되 어 있 습 니 다.역 열 색인 은 색인 키 워드 를 이용 하여 문서 목록 을 직접 확인 하고 찾 고 싶 은 문서 목록 을 확인 하 는 것 입 니 다.전통 적 인 순서 찾기 와 기록 조직 방식 과 는 반대로 역 배열 색인 이 라 고 한다.보통 역 배열 색인 방식 으로 구 성 된 파일 이나 역 배열 색인 을 문서 메 인 파일 과 함께 역 배열 파일 이 라 고 부른다.2 Lucence 색인 기 2.1 모드   2.1.1 독립 색인 모드: 문서 마다 하나의 파일 로 독립 색인   2.1.2 색인 모드 에 부합: 색인 을 기다 리 는 모든 Document 색인 은 파일 2.2 구조 로 되 어 있 습 니 다.    색인 항목 - > 색인 영역 - > 색인 문서 - > 색인 세그먼트 - > 색인   2.2.1 색인 필드 의 속성    1. 도 메 인 이름 (String 형식)    2. 도 메 인 저장 값    3、Store        Store. YES: 색인 과 원본 정보 유지       Store. NO: 정 보 는 색인 만 있 고 저장 하지 않 습 니 다.    4、Index        Index. ANALYZED: 단 어 를 나 누고 색인 을 만 듭 니 다.       Index.ANALYZED_NO_NORMS: 단 어 를 나 누고 색인 을 만 드 는 동시에 index - time, document boosting, field length normalization 등 몇 개의 도 메 인 을 사용 하지 않 습 니 다.       Index. NO: 색인 을 만 들 지 않 음       Index.NOT_ANALYZED: 단 어 를 가리 지 않 지만 색인 을 만 듭 니 다.       Index.NOT_ANALYZED_NO_NORMS: 단 어 를 가리 지 않 고 색인 을 만 드 는 동시에 index - time, document boosting 과 field length normalization 이라는 도 메 인 은 사용 하지 않 습 니 다.    5. Field. TermVector: 도 메 인 내 정보 에 단어 가 필요 한 지 여 부 를 나타 낸다.   2.2.2 색인 항목    색인 항목 은 색인 관리의 최소 단원 이다.프로그램 에 표시 되 지 않 은 호출 은 단어 기 를 이용 하여 배경 에서 도 메 인 값 을 자동 으로 구분 합 니 다.얻 은 모든 독립 요 소 를 색인 항목 이 라 고 부 르 며 색인 을 만 드 는 데 사용 합 니 다.2.3 형식    복합 색인 모드 (기본 값): 색인 파일 의 수 를 줄 이 고 관리 와 사용 에 편리 하 며 정적 색인 에 적 용 됩 니 다.다 중 파일 인덱스 형식 은 동적 인덱스 에 적 용 됩 니 다.2.3.1 다 중 파일 인덱스 형식    일련의 색인 파일 을 사용 하여 각각 색인 을 저장 하고 데 이 터 를 분산 관리 하 는 색인 저장 형식 을 사용 합 니 다.다 중 파일 인덱스 를 열 때 대량의 파일 을 읽 어야 하 며 시스템 의 파일 핸들 등 자원 을 크게 차지 하여 시스템 응답 속도 가 느 리 고 시스템 이 붕 괴 될 수도 있 습 니 다.    주요 색인 파일 및 기능:    1、segment_*:색인 의 인 자 를 설명 합 니 다. 파일 헤더 고정 형식 으로 뒤의 내용 을 설명 합 니 다. 각각 독립 된 새 색인 의 크기, 속성 등 을 포함 합 니 다.    2. fnm: 색인 필드 설명 파일, 하나의 독립 된 색인 (PerIndex) 을 하나의 segment (색인 세그먼트) 라 고 하고, 하나의 fnm 파일 은 이 색인 의 File 수, 각 Field 의 속성 번 호 를 설명 합 니 다.    3. fdx: 문서 도 메 인 값 색인 파일 은 일정한 방식 으로 저장 되 고 docid 에 따라 정렬 하면 직접 위 치 를 정할 수 있 습 니 다.모든 문서 의 Stored fields 값 의 저장 위 치 를 기록 합 니 다.    4. fdt: 문서 도 메 인 값 저장 파일, Stored fields 값 저장 파일.fdx 에 기 록 된 저렴 한 접근 을 통 해    5. tis: 모든 term 가 문서 에 분포 하 는 정 보 를 저장 합 니 다. 예 를 들 어 문서 빈도, 모든 term 문서 에 나타 난 횟수 기록 의 오프셋 과 위치 기록 의 오프셋 배열 순 서 를 포함 합 니 다.Field 이름 사전 에 따라 정렬 하고, Field 마다 term 사전 에 따라 정렬 합 니 다.    6. tii: 이 파일 은 tis 파일 의 색인 과 간소화, 배열 형식 은 같 지만 모든 term 속성 정 보 를 포함 하지 않 습 니 다.이 파일 은 메모리 에 완전히 읽 을 수 있다.    7. frq: 이 파일 은 tis 파일 의 확장 입 니 다.모든 term 가 포 함 된 파일 마다 구체 적 으로 나타 나 는 빈 도 를 기록 합 니 다.    8. prx: 이 파일 은 tis 파일 의 연장 으로 모든 term 가 문서 마다 오프셋 정 보 를 기록 합 니 다.이 문 서 는 클래스 docid 를 생략 하고 frq 파일 에 맞 춰 사용 해 야 합 니 다.    9. tvx, tvd, tvf: 모든 문서 의 양 적 필드 에 대한 정 보 를 색인 하고 유지 합 니 다.2.3.2 복합 색인 구조    1、segment_*:색인 의 인 자 를 설명 합 니 다. 파일 헤더 고정 형식 으로 뒤의 내용 을 설명 합 니 다. 각각 독립 된 새 색인 의 크기, 속성 등 을 포함 합 니 다.    2. segment. gen: 색인 생 성 파 라 메 터 를 저장 합 니 다.    3. cfs: 실제 색인 데 이 터 를 저장 하고 서로 다른 하위 색인 내용 은 일정한 형식 으로 저장 되 며 색인 최적화 압축 작업 이 발생 할 때 까지 구분 할 수 있 습 니 다.3. 색인 작업 과 관련 된 클래스
3.1 IndexWriter
    구조 방법: 
IndexWriter(Directory d, Analyzer a, boolean create, IndexDeletionPolicy deletionPolicy, IndexWriter.MaxFieldLength mfl) 

IndexWriter(Directory d, Analyzer a, boolean create, IndexWriter.MaxFieldLength mfl) 

IndexWriter(Directory d, Analyzer a, IndexDeletionPolicy deletionPolicy, IndexWriter.MaxFieldLength mfl) 

IndexWriter(Directory d, Analyzer a, IndexDeletionPolicy deletionPolicy, IndexWriter.MaxFieldLength mfl, IndexCommit commit) 

IndexWriter(Directory d, Analyzer a, IndexWriter.MaxFieldLength mfl) 

    각 구조 방법의 매개 변 수 는 의미 가 같다.그 중에서 Directory d 는 색인 의 저장 경 로 를 표시 합 니 다.Analyzer a 는 단어 기 입 니 다.boolean create 는 새 색인 을 만 들 지 여 부 를 표시 합 니 다. IndexDeleteionPolicy deleteonPolicy 는 색인 삭제 정책 을 표시 합 니 다.IndexWriter. MaxFieldLength mfl 색인 항목 개수;Index Commit commit, commt point 와 연 결 된 segment 파일 을 가 져 오 는 데 사 용 됩 니 다.
3.2 IndexReader
IndexReader 는 디스크 디 렉 터 리 에 저 장 된 색인 을 불 러 오고 삭제 하 는 작업 을 담당 하 는 Lucence 색인 을 관리 합 니 다.내부 적 인 방법 을 통 해 현재 색인 에 있 는 문서 의 수 등 정 보 를 통계 할 수 있 습 니 다. 
3.3 Analyzer
분사 기
4. 색인 설정 에 대한 조언
4.1 색인 영역 유형 선택
1) 불필요 한 저장 소 최소 화
2) 검색 할 필요 가 없 는 내용 은 색인 을 만 들 지 않 는 다.
3) 텍스트 가 아 닌 형식 은 미리 전환 해 야 한다.
4) 전체적으로 보관 해 야 할 내용 은 단 어 를 나 누 지 않 는 다.
4.2 색인 매개 변수 최적화
1) 통합 매개 변수 setMergeFactor () 를 설정 하여 최대 메모리 에 저 장 된 색인 문서 문서 의 개 수 를 제어 합 니 다.
2) 최대 문서 개수 setMaxBufferedDocs () 를 설정 합 니 다. 병합 세그먼트 의 크기, 즉 하나의 색인 세그먼트 가 몇 개 에 이 르 면 더 큰 새 세그먼트 로 합 칠 수 있 습 니 다.
3) 도 메 인 인덱스 개수 제한 setMaxFieldLength ()
4) 최대 메모리 삭제 항목 설정 setMaxBufferedDeleteTerms
4.3 디스크 인덱스 와 메모리 인덱스
  디스크 인덱스 는 FSDirectory 를 사용 하고 메모리 인덱스 는 RAMDirectory 를 사용 합 니 다.
4.4 동기 화 및 잠 금 메커니즘
write. lock 은 색인 문 서 를 동시에 수정 하지 않도록 설정 합 니 다.
commt. lock 은 주로 segment 를 만 들 고 통합 하거나 읽 을 때 사용 하 며 색인 의 통합 함수 와 세그먼트 통합 함수 에서 만 사용 합 니 다.
실례:
 
import java.io.File;
import java.io.FileInputStream; 
import java.io.IOException;
import java.util.Date;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;

public class LuceneIndexManager {
    private static String Index_Path = "D:/index";
    private static String Text_Path = "D:/text/wine.txt";

    public static void main(String[] args) {
        try {
              Date start = new Date();
              File file1 = new File(Text_Path);
              File file2 = new File(Index_Path);
             Directory dir = FSDirectory.open(file2);
              Analyzer TextAnalyzer = new StandardAnalyzer(Version.LUCENE_CURRENT);
              IndexWriter TextIndex = new IndexWriter(dir,TextAnalyzer, true,IndexWriter.MaxFieldLength.LIMITED);
              Document document = new Document();
              Field field_name = new Field("name", file1.getName(),Field.Store.YES,Field.Index.NOT_ANALYZED);
              document.add(field_name);
              FileInputStream inputfile = new FileInputStream(file1);
              int len = inputfile.available();
              byte[] buffer = new byte[len];
              inputfile.read(buffer);
              inputfile.close();

              String contenttext = new String(buffer);
              Field field_content = new Field("content", contenttext,Field.Store.YES, Field.Index.ANALYZED);
              document.add(field_content);
              TextIndex.addDocument(document);
              TextIndex.optimize();
              TextIndex.close();
              Date end = new Date();
              long tm_index = end.getTime() - start.getTime();
              System.out.print("Total Time(ms): ");
              System.out.println(tm_index);

             } catch (IOException e) {
               e.printStackTrace();
          }
         System.out.println("Index Success");
   }

}

좋은 웹페이지 즐겨찾기