Stack Empty
Lucene의 색인 본문
루씬의 색인 작업은 크게 다음 3가지 순서로 볼 수 있다.
- 텍스트 변환 (추출)
- 분석 (Token화)
- 색인 데이터 생성
1. 텍스트 변환
루씬은 Full-Text 기반의 IR 라이브러리이므로 오로지 String만을 색인화 할 수 있다. 하지만 우리는 PDF 파일, MS 워드, 파워포인트 등의 문서로 정보를 제공하기도 한다. 이것은 Java에서 표현할 수 있는 일반적인 String이 아니므로 이들 정보에서 텍스트 본문을 추출해 낼 수 있는 무엇인가가 필요하게 된다. 그리고 HTML이나 XML은 그것 자체로 텍스트이지만 태그나 엘리먼트를 제거하여 실제 본문의 내용만을 추출할 수 있는 방법이 필요하다.
2. 분석
루씬에서 문서는 Document 객체로 다뤄지는데 IndexWriter의 addDocument를 호출하여 한 문서를 등록시키게 된다. 이렇게 추가된 문서는 루씬이 색인 대상으로 간주하며 Document 객체의 Field들의 텍스트 내용을 분석하게 된다. 이 과정에서 텍스트를 루씬이 기계적으로 처리할 수 있는 Token 인스턴스 단위로 쪼개며, 방법은 우리가 등록하여 준 Analyzer에 위임하여 처리하게 된다. 당연히 텍스트 자체를 직접 제어하므로 검색 결과의 질에 가장 큰 영향을 미친다.
3. 색인 데이터 생성
1, 2의 과정을 거치면 색인 저장소에 저장을 하게 된다. 루씬은 Inverted Index로 알려진 데이터 구조로 자료를 저장한다. 일반적인 데이터 구조는 어느 문서에 어떤 단어가 있는지를 나타내는데 Inverted Index는 어느 단어가 어떤 문서들에 있는가를 나타내는 구조이다. 왜냐하면 우리는 특정 키워드를 통해 어느 문서에 해당 키워드가 포함되어 있는가에 관심이 있으므로 질의한 키워드가 포함되어 있는 문서로 데이터 구조를 생성해 두는게 속도면에서 이득이기 때문이다.
기본적인 루씬의 색인 테스트를 위해 JUnit을 사용하여 다음과 같은 기본 형태의 색인 테스트 케이스 Class를 만든다.
(루씬 인 액션의 예제를 3.X대 버전으로 직접 변경하였다.)
'Search > Lucene' 카테고리의 다른 글
Lucene의 색인 - Document 갱신 (0) | 2013.07.01 |
---|---|
Lucene의 색인 - Document 삭제 (0) | 2013.06.28 |
Lucene의 색인 범위 제한 (0) | 2013.06.20 |
Lucene TokenStreams (0) | 2013.06.18 |
Lucene으로 색인 만들기 (0) | 2013.06.14 |