[Lucene] 2장. 텍스트 색인

Lucene 기초 다지기

출처 : 실전비급 아파치 루씬 7: 엘라스틱서치 검색 엔진을 향한 첫걸음

목차

  1. 루씬의 이해
  2. 텍스트 색인
  3. 텍스트 분석
  4. 텍스트 검색과 질의 방법
  5. 루씬의 고급 검색
  6. 루씬 동작 방식 이해하기
  7. 다양한 확장 기능

텍스트 색인

1. 색인 이해하기

1) 색인의 개념

2) 색인 과정

  1. 텍스트 획득 : 도큐먼트를 수집하고 저장

    • 이메일이나 웹 페이지, 기사, 메모 등과 같은 검색 대상에서 데이터를 추출
    • 크롤러 : 정보를 자동으로 수집하는 프로그램. 검색 엔진의 데이터 수집으로 많이 사용된다.
    • 피드 : 일정한 시간에 만들어지고, 한 번 출판되면 변경할 수 없다
      • RSS 피드 : 기사나 블로그 포스팅의 업데이트 내역을 정리한 XML 기반 콘텐츠 배급 포맷…
    • 변환 : docx, PDF, HTML, XML 같은 포맷의 파일을 별도의 변환 도구를 이용해 다른 도구로 변환!
    • 도큐먼트 데이터 저장 : 정제된 데이터 저장소에서의 데이터 획득 방식
  2. 텍스트 변환 : 도큐먼트를 색인에 알맞게 변환

    • 텍스트를 효과적으로 검색할 수 있도록 수집 데이터를 변경할지, 재구성할지 결정해야 함!

    • 여러 포맷의 텍스트를 분석 가능한 단위로 쪼개고, 이를 색인해서 효과적으로 인식 가능한 텀으로 변환!

    • 인덱스 텀 (Index Term) : 위 과정을 거쳐 변환된 용어

    • 종류

      • 텍스트 파싱 : 검색 대상이 되는 텍스트를 검색 엔진에서 인식 가능하게 변환하는 것
      • 텍스트 분석 : 검색 엔진이 인식 가능한 문서의 텍스트를 파싱해, 검색에 최적으로 분석한 후 변경, 재구성
  3. 색인 생성 : 빠른 검색에 최적인 자료 구조를 생성하고, 색인에 저장

    • 텀을 검색 가능한 특별한 자료 구조 (역색인)으로 구성!
    • 역색인은 텀을 키로, 그 텀이 포함된 도큐먼트 정보를 값으로 쌍을 이뤄 구성 → 추상적으로 형태
    • 추출된 단어가 전체 데이터에서 어디에 위치하는지 역색인으로 구성하는 과정이다

3) 루씬에서 역색인을 만드는 과정

  1. 도큐먼트 텍스트
    • 색인을 하려면 루씬에서 인식 가능한 구조로 데이터를 정제 해야 한다.
    • 검색에서, 찾는 정보가 담긴 단위가 도큐먼트다.
      • 색인하길 원하는 데이터는 모두 도큐먼트에 담기며, 이렇게 담긴 텍스트가 루씬에 전달되면 색인 시작!
  2. 토큰 스캔
    • 도큐먼트는 필드라는 항목으로 구성됨! 도큐먼트를 나타내는 여러 구성 요소는 필드로 매핑
    • 도큐먼트의 필드 유형에 따라 필드 내용에서 텀이 되는 부분을 찾는 과정이 토큰 스캔
  3. 토큰 분석
    • 토큰 스캔 과정에서 필드 내용이 토큰으로 분리되면, 이를 분석하고 정제해야 함
  4. 해시 테이블
    • 역색인을 구성할 때, 대상 도큐먼트에서 텀 별로 등장하는지를 함께 기록해 검색 신뢰성을 더 높인다
    • 등장 횟수 를 해시 테이블에 저정한다
  5. 퀵 정렬과 병합 정렬
    • 해시 테이블에서 텀의 노출 수를 도큐먼트별로 구했다면, 검색에 용이하도록 정렬
  6. 델타 인코딩
    • 검색 데이터의 크기는 대체로 매우 크다! → 실제 디스크에 저장하기 전에 데이터 양을 줄이는 압축 과정 필요!
    • 델타 인코딩 (Delta Encoding)은 서로 인접한 값 사이를 함께 기록해 데이터를 압축하는 기법
  7. 디스크 쓰기
    • 모든 과정을 거친 최종 결과물은 디스크에 저장된다.



2. IndexWriter

1) IndexWriter 클래스

2) IndexWriterConfig 클래스

3) Directory 클래스



3. 도큐먼트와 필드

1) 도큐먼트

2) 필드

3) 텀



4. 다양한 데이터 타입 필드

1) String

2) 숫자 타입

3) Date 타입



5. DocValues

1) 루씬의 캐시

2) DocValues 등장 배경 및 특징