목요일, 4월 18
Shadow

#017 루씬 인 액션을 시작하며..

 

오늘부터 공부하게될 루씬 인 액션이라는 책이다. 한주에 한부씩을 읽고 리뷰할 예정이다. 몇년전에 검색엔진을 만들어 보고 싶은 마음에 이책의 초판을 사서 보았는데, 그 책과 지금의 책을 읽어 보니 많은 기능들이 추가 된 것을 알 수 있었다.  먼저 챕터를 살펴보고 가기 전에 출판 서평을 먼저 보도록 하겠다.  

*
DB에 담겨 있는 수백만 건의 정보를 마음대로 조회하지 못하거나, 사내 인트라넷의 엄청난 디렉토리 구조 안에 저장된 수많은 문서 중 원하는 내용이 들어있는 문서를 찾지 못해 어려움을 겪고 있다면, 그렇다고 상용 검색 엔진을 구입해 사용하기엔 너무 부담스러운 경우, 루씬(Lucene)이 정답이다. 이 책은 외주 개발이든 사내 개발이든 간에 전문적인 검색 기능을 필요로 한다면 최우선으로 고려해야 할 루씬에 대해 색인부터 검색과 고급 설정까지 예제 기반으로 설명한다. [(개정판) 루씬 인 액션]을 기반으로 루씬의 A부터 Z까지 완벽하게 활용하는 고성능 검색 애플리케이션을 개발해보자.

*
초판이 출간된 이후 5년간 루씬 프로젝트에서 많은 부분이 달라졌다. 영향력 있는 오픈소스 프로젝트는 대부분 그렇지만 루씬도 탄탄한 기술적인 기반을 갖고 있으며, 사용자와 개발자가 참여하는 안정적인 커뮤니티가 계속해서 유지되고 있고, 이런 잠재력이 뭉쳐 엄청나게 발전하는 중이다. 초판이 출간된 이후 추가되거나 변경된 기능을 살펴보면 대략 다음과 같다.

– 준실시간 검색
– 문서에서 텍스트를 추출할 때 티카(Tika) 프로젝트 활용
– NumericField를 통해 숫자 필드를 만들고, NumericRangeQuery 질의로 숫자 범위를 빠르게 조회 가능
– IndexWriter를 통해 문서를 변경하거나 삭제
– IndexWriter에서 트랜잭션 관련 기능 제공(커밋이나 롤백)
– 읽기 전용의 IndexReader와 NIOFSDirectory 등을 활용해 병렬 검색 능력 개선
– 순수한 불리언 검색 기능
– 색인에 추가 정보를 적재하고, BoostingTermQuery 등에서 적재된 정보를 활용
– IndexReader.reopen 메소드로 변경 사항이 반영된 IndexReader 인스턴스를 최대한 효율적으로 확보 가능
– 메모리, 디스크, 파일 기술자 등의 자원 활용도 파악
– 함수 질의
– 색인이나 검색 속도 등의 성능 지표를 기준으로 최적화
– 진행 중인 색인 작업을 멈추지 않고도 색인의 내용을 백업
– 추가 언어에 대한 루씬 포팅 프로젝트
– 성능 측정 프레임워크를 사용한 루씬의 성능 측정
– 재사용할 수 있는 TokenStream API
– 색인이나 검색할 때 스레드를 활용해 병렬 처리
– 색인에 저장된 필드의 내용을 가져올 때 FieldSelector를 활용해 성능 개선
– TermVectorMapper를 사용해 텀 벡터를 불러오는 방법 제어
– 루씬의 락 관리 정책 단순화
– LockFactory, DeletionPolicy, IndexDeletionPolicy, MergePolicy, MergeScheduler 등을 입맛에 맞게 새로 구현
– XMLQueryParser나 루씬 지역 검색 등의 새로운 contrib 모듈
– 자주 발생하는 문제 수정

그리고 12장, 13장, 14장에 새로운 사례 연구도 실었다. 루씬의 관리 측면을 설명하고자 11장도 추가했다. 원래 여러 종류의 문서를 읽고 파싱하는 프레임워크에 대해 설명했던 7장에서는 아파치 프레임워크 중 하나인 티카를 기반으로 새로 설명한다. 그리고 모든 예제 코드는 3.0.1 버전을 기준으로 작성했다. 물론 초판에서 받았던 독자의 다양한 의견도 다수 반영했다.

*
자신들의 제품이나 솔루션에 강력한 검색 기능을 더하려는 개발자들은 이 책을 꼭 읽어야 한다. 또한 단순히 루씬이 어떤 것인지 궁금한 사람에게도 훌륭한 정보를 제공하며, 정보 검색 기술에 대해 공부하는 독자에게도 좋은 교재가 될 수 있다. 그리고 당장은 알아둘 필요가 없다 하더라도 읽어두면 정보 검색이라는 트렌드에 부응하는 지식을 쌓을 수 있다.

이 책에서는 아파치 프로젝트 가운데 하나인 루씬, 즉 자바 버전의 루씬을 중점적으로 다루며, 대부분의 예제 코드도 자바로 작성했다. 따라서 자바에 익숙하다면 아주 편안하게 내용을 이해할 수 있을 것이며, 여러 가지 자바 프로그래밍 경험은 이 책을 읽는 데 큰 도움이 된다. 자바 버전의 루씬이 아니고 C++나 C#, 파이썬, 펄 등의 언어로 루씬을 사용해도 기본개념과 주요기능은 자바 버전과 거의 같으므로 별다른 어려움 없이 적용할 수 있을 것이다.

*
‘1부 루씬 기초’에서는 루씬의 핵심 API와 관련된 내용을 다룬다. 여러분의 프로그램에 루씬을 적용해야 한다면 1부를 꼭 읽어야 한다.

1장은 루씬과의 첫 만남이다. 정보 검색 기술에 대한 약간의 이론적인 내용과 정보 검색에 있어 루씬이 갖는 장점을 소개한다. 그리고 필요에 따라 직접 응용할 수 있게 루씬을 이용해 색인과 검색을 수행하는 간단한 예제 프로그램을 작성한다. 이 예제 프로그램은 이후에 보게 될 모든 예제의 기본이 된다.

2장에서는 루씬의 기본적인 색인 방법에 친숙해질 차례다. 여러 유형의 필드와 숫자와 날짜 등의 자료를 어떻게 색인하는지도 알아보고, 또한 색인 절차를 튜닝하고 최적화하는 방법도 알아본다. 덧붙여 스레드 동기화도 설명한다.

3장은 루씬을 통해 검색하는 방법을 알아본다. 여기서는 질의에 대한 검색 후 결과의 순서, 즉 점수(score)와 순위(ranking)를 결정하는 방법을 포함한다. 그리고 사람이 입력한 질의문을 루씬의 질의로 변환하는 방법과 함께 어떤 종류의 질의어가 가능한지 살펴본다.

4장은 루씬의 색인 작업의 주요 핵심 과정인 분석(analysis)에 대한 내용을 다룬다. 분석의 가장 중요한 단위인 토큰을 비롯해 토큰 스트림, 토큰 필터를 알아보고, 루씬이 기본적으로 제공하는 분석기들과 더불어 동의어 분석기와 유사 발음 분석기에 대해 각각 상세히 다룬다. 그리고 중국어와 같은 비영어권 텍스트에 대한 분석기도 살펴본다.

5장은 검색과 관련해 앞에서 다루지 않았던 내용을 다루며, 텍스트 분석과 관련된 고급 검색 기능, 즉 결과 정렬과 필터링, 텀 벡터(term vector) 가중치를 활용하는 방법을 살펴본다. 또 스팬 질의 계열을 포함한 고급 질의 형태에 대해 알아보고, 루씬의 다중 색인에서 병렬과 원격으로 검색하는 방법을 다룬다.

6장은 이전에 설명했던 고급 검색 기능에 덧붙여 루씬의 검색 기능을 확장하는 방법을 다룬다. 검색 결과를 원하는 대로 정렬할 수 있는 방법, 사용자의 질의문 파싱 부분을 확장하는 방법, 결과를 원하는 대로 수집할 수 있는 방법, 검색 성능을 높이는 몇 가지 방법 등을 배운다.

‘2부 고급 루씬’에서는 루씬의 기본 기능을 기반으로, 루씬을 이용한 실제 작업 등 고급 내용에 대해서 살펴본다.

7장에서는 아파치 루씬 프로젝트 안에 속해 있는 또 다른 오픈소스 프레임워크인 티카(Tika)에 대해 소개한다. 티카를 사용하면 다양한 종류의 문서 파일에서 본문 텍스트와 메타 정보 등을 추출할 수 있다.

8장에서는 루씬과 관련된 다양한 툴을 다룬다. 루씬 소스코드 관리 시스템 안의 contrib 디렉토리 안에 각종 도구가 포함돼 있는데, 루씬의 색인을 살펴볼 수 있는 여러 가지 툴과 개발자가 쓸 수 있는 개발 툴을 소개한다. 먼저 루씬의 색인을 열고 들여다 볼 수 있는 별도의 프로그램인 루크(Luke)에 대해 살펴본다. 그리고 가장 많이 사용하는 루씬 샌드박스 툴로 검색 결과에서 검색어를 눈에 쉽게 띄게 해주는 하이라이터(Highlighter)와 검색어 추천 기능, 비영어권 언어를 처리할 수 있는 분석기, 그리고 여러 종류의 추가적인 질의에 대해 소개한다.

9장에서는 루씬의 contrib 모듈을 통해 지원하는 또 다른 기능을 알아본다. 예를 들어 여러 개의 파일을 연결해 하나인 것처럼 사용하거나, 색인을 버클리 DB에 저장하거나, 워드넷의 유의어를 색인에 반영하는 기능 등이 있다. 그리고 처리 속도를 높이고자 색인 전체를 메모리에 올리는 방법 두 가지를 알아본다. 그 다음으로는 XML의 내용을 읽어 루씬 질의를 생성해주는 XML 질의 파서도 알아본다. 마지막으로 루씬을 사용해 위치 정보를 어떻게 검색하는지 알아보고, 내부 구조가 변경된 QueryParser도 알아본다.

10장에서는 다른 프로그래밍 언어, 예를 들어 C++, C#, 파이썬, 펄, 루비 등의 언어에서 루씬의 기능을 사용하는 방법을 알아본다.

11장에서는 루씬의 관리 측면에 대해 소개한다. 예를 들어 루씬이 디스크와 메모리, 파일 기술자 등의 자원을 얼마나 필요로 하는지 설명한다. 그리고 색인속도나 시간 등의 지표를 측정하는 방법도 알아보고, 색인 작업을 멈추지 않고도 현재 색인을 백업하는 방법, 색인이나 검색 작업에 다중 스레드를 활용해 성능을 최대로 뽑아내는 방법 등도 알아본다.

‘3부 사례 연구’에서는 지금까지 루씬에 대해 설명했던 내용을 기반으로 하면서 루씬을 중점적으로 사용해 흥미롭고 빠르고 대용량 처리가 가능하게 구현한 여러 가지 활용 사례를 소개한다.

참조: http://shopping.daum.net/go.daum?pkey=hXDc0V_yGnj-1pV.yRitpFVNXDLW44V7.34IUY-MesHjQCaYyhsH-b-OI2WLJcF8Git6F33CSzTZESzcyu.q.sR1pR_gHssb.XMV4XuJl3kwJp2Dfv1i6mjcbmAYbYSDLXwKJnJiRiI4jOOLzm4G8fQ1lnQ00&val=Itg00_mCYaEm7_yn48CV1zJhQIfLBFRgGysmnT2sC.aw1pfoE3KWSINFyj-YSjAQzNPCe1UVN9m4fpi93D1iNqUnKlBaeJ4vsXAz9gEzZQ3df6JfC28T_6upR4g00&search=wjA001a2WN9SEzdYgsPihidkPEY.NiF8eXVbly7iq4za1YE5W9k6l.GFK.5fLu8O2.KYoWZGJtVSxh3WwSemXGCwz2mJMWRkklhgZn4TOTkDeEwyZ-gBbEE_CGTj-PPeqOaahvN5Gy-d6eYxGmsLENMCn68HyxPmWhon2eonrFW3VLNNR.WuYUyhyR-za3r9temrHPtCYYMkbydc0

 

대충 이런 내용들이 있으며, 목차를 살펴보면 총 14개의 챕터로 구성되어 있으며, 14주에 걸쳐서 보려고 한다. 이상!

 

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.