책소개
◆ 루씬 창시자, 더그 커팅이 추천한 필독서
◆ 정보검색엔진과 솔루션 개발을 위한 실무서
◆ 한국어판 특별부록 '루씬 한글 분석기' 수록
루씬은 확장성이 좋고 빠른 검색엔진이며 성능이 아주 훌륭하고 사용하기도 너무 간편해서, 다양한 오픈소스 프로젝트들 중에도 진흙 속의 보석과도 같은 존재이다. 루씬 인 액션은 루씬을 사용하는 데 꼭 필요한 필독서이다. 이 책에는 MS워드, PDF, HTML, XML 등의 파일을 포함해 여러분이 갖고 있는 자료를 색인하는 방법에 대해 설명한다. 물론 검색, 결과 정렬, 결과 필터링, 결과 문자열 하일라이팅과 같은 내용도 충분히 다룬다.
루씬은 이미 다양한 분야에서 실무에 적용되고 있다. 예를 들어 포춘100대 기업들의 다양한 토론 사이트나 상용 이슈 트래킹(issue tracking) 소프트웨어, 마이크로소프트의 아웃룩 검색 소프트웨어, 그리고 너치와 같은 웹 검색엔진(최고 수십억 개의 웹 페이지를 색인할 수 있도록 설계되었다)에서도 사용한다. 또한 아카마이(Akamai), 오버추어(Overture), 테크노라티(Technorati), 핫잡스(HotJobs), 에피퍼니(Epiphany), 페덱스(FedEx), 마요 클리닉(Mayo Clinic), MIT, 뉴사이언티스트(New Scientist Magazine), 기타 여러 사이트에서 루씬을 사용하고 있다.
여러분의 소프트웨어에 검색 기능을 추가하는 것은 어려운 일이 아니다. 루씬 인 액션에서는 실무에 적용하기 좋은 여러 가지 예제와 설명으로 여러분이 루씬을 쉽게 사용할 수 있도록 도와줄 것이다.
- 루씬을 여러분의 프로그램에 어떻게 통합할 것인가
- 다양한 문서 형식을 지원할 수 있는 문서 변환 프레임웍
- 너치, 더서버사이드, jGuru등의 사이트에 대한 사례 조사
- 펄, 파이썬, C#/닷넷, C++ 등의 언어로 만들어진 루씬
- 정렬, 필터링, 텀벡터, 다중 및 원격 색인 검색
- 최신 SpanQuery 관련 클래스, 쿼리 분석기 확장, 결과 항목 수집
- 성능 측정 및 최적화
- 루씬 애드온(결과 하일라이팅, 유사어 참조 등)
- 한글 자료에 루씬을 어떻게 적용할 것인가
저자 및 역자 소개
저자 : 에릭 해쳐(Erik Hatcher)
이미 여러 분야에서 다양한 프로그래밍 언어를 사용해 소프트웨어를 만들었으며, 스티브 로런(Steve Loughran)과 함께 업계에서 알아주는 책 중 하나인 『Java Development with Ant』(Manning, 2002)를 쓰기도 했다. 첫 책인 『Java Development with Ant』를 출판한 이후 No Fluff, Just Stuff 심포지엄이나 JavaOne 컨퍼런스, O'Reilly의 오픈 소스 컨벤션(Open Source Convention), 오픈 소스 컨텐트 관리 컨퍼런스(Open Source Content Management Conference), 각종 자바 사용자 그룹 모임등에서 강연을 해왔다. 현재 아파치 소프트웨어 재단의 회원으로 활동중이며 루씬, 앤트, 태피스트리 등의 프로젝트에서 왕성하게 활동 중이다.
저자 : 오티스 고스포드네티츠(Otis Gospodnetic)
4년 넘도록 루씬 프로젝트에 참여했으며, jGuru의 루씬 FAQ8를 운영하고 있다. 현재 학생과 선생님을 위한 솔루션을 개발하는 와이어리스 제너레이션(Wireless Generation)이라는 회사에서 소프트웨어 엔지니어로 일하고 있다. 틈틈이 작업한 심피(Simpy, http://www.simpy.com)라는 북마크 관리 사이트9도 운영하고 있고, O'Reilly 네트워크10와 IBM의 디벨로퍼웍스(developerWorks)에 다양한 글을 기고하고 있다.
역자 : 주성진
아주대학교 화학공학과를 졸업했고, 5년간 한국정보공학(주)의 검색엔진 레이다와 제품군 개발 경험을 가지고 있다. 지금은 유해정보차단 서비스를 하고 있는 플랜티넷에서 차세대 유해차단서비스를 개발중이다. 영화와 책을 삶의 일부분으로 삼아 지내면서 근래에는 경영/마케팅 서적에 푹 빠져서 생활중이다. 장래에는 기획형 엔지니어로 성장하는게 목표이다.
역자 : 강철구
아주대학교 대학원 컴퓨터공학과를 졸업했고, 5년간 한국정보공학(주)에서 교육부 B2B 정부문서 유통 검색엔진 개발 등 검색엔진에 대한 다양한 경험을 가지고 있다. 현재는 Lucene을 이용한 검색 엔진 szSearch을 개발중이다.
역자 : 이문호
국립 경상대학교 컴퓨터과학과 및 동 대학원 전자계산학과(영상처리 전공)를 졸업했으며, 내용기반 영상 검색엔진(CBIR), 정보검색엔진과 그룹웨어, 포탈 관련 개발 경험을 쌓았다. 1997년부터 영상처리 홈페이지(http://www.conv2.com)를 운영하면서 영상처리 관련 자료를 제공하며 독자들이 올리는 문의에 답변하는 재미로 지내고 있다. Gonzalez 교수의 저서와 맞먹는 영상처리 고급서를 언젠가 내고 말 거라는 소박한 꿈을 갖고 있으며, 대표 저서로는 『Java를 이용한 디지털 영상처리』 등이 있다.
목차
• 목차보기
1부 기본편
1장 루씬과의 첫 만남
1.1 정보구성 방법과 접근 방법의 발전
1.2 루씬이란?
1.2.1 루씬은 이것이다!
1.2.2 루씬의 역할
1.2.3 루씬이 지나온 길
1.2.4 누가 루씬을 사용하나?
1.2.5 사용 가능한 언어
1.3 색인과 검색
1.3.1 색인이 뭐지? 왜 중요할까?
1.3.2 그렇다면 검색은 무엇인가?
1.4 루씬 돌려보기
1.4.1 색인 만들기
1.4.2 색인 내의 검색
1.5 색인 주요 클래스
1.5.1 IndexWriter
1.5.2 Directory
1.5.3 Analyzer
1.5.4 Document
1.5.5 Field
1.6 핵심 검색 클래스
1.6.1 IndexSearcher
1.6.2 Term
1.6.3 Query
1.6.4 TermQuery
1.6.5 Hits
1.7 다른 검색엔진은 어떤 것이 있나?
1.7.1 IR 라이브러리
1.7.2 색인/검색 소프트웨어
1.7.3 그 밖의 정보
1.8 요약
2장 색인
2.1 색인에 대한 이해
2.1.1 텍스트 변환
2.1.2 분석
2.1.3 색인에 쓰기
2.2 색인 기본 작업
2.2.1 색인에 Document 추가
2.2.2 색인에서 Document 삭제하기
2.2.3 Document 복구
2.2.4 색인의 Document 갱신
2.3 Document와 Field에 가중치 지정
2.4 날짜 색인
2.5 숫자 색인
2.6 결과 정렬에 사용할 Field 색인
2.7 색인 과정 제어
2.7.1 색인 성능 튜닝
2.7.2 메모리 기반 색인: RAMDirectory
2.7.3 필드 크기 제한: maxFieldLength
2.8 색인 최적화
2.9 동시성, 스레드 안전성, 락킹 문제
2.9.1 동시성 규칙
2.9.2 스레드 안전성
2.9.3 색인 락
2.9.4 색인 락의 비활성화
2.10 색인
2.11 요약
3장 애플리케이션에 검색 추가하기
3.1 간단한 검색 기능 구현
3.1.1 특정 단어 검색
3.1.2 사람이 입력한 질의 표현식 읽기: QueryParser
3.2 IndexSearcher
3.2.1 Hits 활용
3.2.2 Hits를 이용한 페이징
3.2.3 색인을 메모리에 올리기
3.3 루씬의 검색결과 순위점수 계산법
3.3.1 루씬, 설명할 게 많다!
3.4 프로그램으로 질의 만들기
3.4.1 텀 검색: TermQuery
3.4.2 범위 검색: RangeQuery
3.4.3 문자열 검색: PrefixQuery
3.4.4 질의 결합: BooleanQuery
3.4.5 문장 검색: PhraseQuery
3.4.6 와일드카드 검색: WildcardQuery
3.4.7 유사 텀 검색: FuzzyQuery
3.5 질의 표현식 파싱: QueryParser
3.5.1 Query.toString()
3.5.2 불린 연산자
3.5.3 그룹화
3.5.4 필드 선택
3.5.5 범위 검색
3.5.6 문장 질의
3.5.7 와일드카드와 접두어 질의
3.5.8 퍼지 질의
3.5.9 가중치 질의
3.5.10 QueryParser에 대한 고민
3.6 요약
4장 분석
4.1 분석기 사용
4.1.1 색인 분석
4.1.2 QueryParser와 분석
4.1.3 파싱과 분석: 분석의 한계
4.2 분석기 상세 분석
4.2.1 토큰의 구성
4.2.2 TokenStream의 내부 구조
4.2.3 분석기 작동 확인
4.2.4 필터링 순서의 중요성
4.3 내장 분석기 활용
4.3.1 StopAnalyzer
4.3.2 StandardAnalyzer
4.4 키워드 필드 활용
4.4.1 또 다른 KeywordAnalyzer
4.5 비슷한 발음 검색
4.6 유의어, 별명, 동의어 처리
4.6.1 토큰 위치 확인
4.7 스테밍 분석
4.7.1 빈공간
4.7.2 통합
4.7.3 문제의 빈 공간
4.8 언어 문제
4.8.1 유니코드와 인코딩
4.8.2 비영어권 텍스트 분석
4.8.3 아시아권 텍스트 분석
4.8.4 짜이지엔
4.9 너치의 분석 방법
4.10 요약
5장 고급 검색기법
5.1 검색 결과 정렬
5.1.1 정렬
5.1.2 유사도 정렬
5.1.3 색인 순서 정렬
5.1.4 필드 정렬
5.1.5 정렬순서 변경
5.1.6 다중필드 정렬
5.1.7 정렬필드 타입 선택
5.1.8 지역화 설정
5.1.9 성능 효과
5.2 PhrasePrefixQuery 사용
5.3 동시에 여러 필드 검색
5.4 루씬의 새로운 기능: 스팬질의(Span queries)
5.4.1 스팬 블록 생성: SpanTermQuery
5.4.2 필드 시작부분의 스팬
5.4.3 서로 인접한 스팬
5.4.4 일치하는 결과에서 중복되는 스팬 제외
5.4.5 스팬 확장
5.4.6 SpanQuery와 QueryParser
5.5 검색 필터링
5.5.1 DateFilter
5.5.2 QueryFilter
5.5.3 보안 필터
5.5.4 QueryFilter의 대안
5.5.5 필터 결과 캐시
5.5.6 기본 필터 이외의 것들
5.6 다중 색인에 대한 통합 검색
5.6.1 MultiSearcher
5.6.2 ParallelMultiSearcher를 이용한 멀티스레드 검색
5.7 텀벡터 자세히 보기
5.7.1 비슷한 책 찾기
5.7.2 카테고리 자동분류
5.8 요약
6장 확장 검색
6.1 사용자정의 정렬
6.1.1 사용자정의 정렬에 사용된 값 읽기
6.2 사용자정의 HitCollector
6.2.1 BookLinkCollector 소개
6.2.2 BookLinkCollector
6.3 QueryParser 확장
6.3.1 QueryParser 기능 변경
6.3.2 퍼지 검색과 와일드카드 검색 차단
6.3.3 숫자 범위 질의 처리
6.3.4 순서있는 구문 질의
6.4 사용자정의 필터 사용
6.4.1 필터링 질의
6.5 성능 테스트
6.5.1 검색 속도 테스트
6.5.2 부하 테스트
6.5.3 다시 QueryParser
6.5.4 성능 테스트의 교훈
6.6 요약
2부 고급편
7장 일반적인 문서 포맷 파싱
7.1 다양한 문서 다루기
7.1.1 공통 DocumentHandler 인터페이스 생성
7.2 XML 색인
7.2.1 SAX를 이용한 파싱 및 색인
7.2.2 다이제스터를 이용한 파싱과 색인
7.3 PDF 문서 색인
7.3.1 PDFBox를 이용한 텍스트 추출과 색인
7.3.2 내장된 루씬 지원 기능
7.4 HTML 문서 색인
7.4.1 HTML 소스 데이터 가져오기
7.4.2 JTidy
7.4.3 NekoHTML
7.5 마이크로소프트 워드 문서 색인
7.5.1 POI 이용
7.5.2 TextMining.org의 API
7.6 RTF 문서 색인
7.7 일반 텍스트 문서 색인
7.8 문서 처리 프레임웍 만들기
7.8.1 FileHandler 인터페이스
7.8.2 ExtensionFileHandler
7.8.3 FileIndexer 어플리케이션
7.8.4 FileIndexer 활용
7.8.5 FileIndexer의 장애요소와 프레임웍을 확장하는 방법
7.9 다른 텍스트 추출 도구
7.9.1 문서 관리 시스템과 서비스
7.10 요약
8장 툴과 확장
8.1 루씬 샌드박스
8.2 색인과 대화
8.2.1 루클리: 명령행 인터페이스
8.2.2 루크: 루씬 색인 툴박스
8.2.3 리모: Lucene Index Monitor
8.3 분석기, 토크나이저, 토큰필터
8.3.1 SnowballAnalyzer
8.3.2 샌드박스 분석기 얻기
8.4 앤트와 루씬을 통한 자바 개발 작업
8.4.1 태스크 활용
8.4.2 사용자정의 문서 핸들러 구현
8.4.3 설치
8.5 자바스크립트 브라우저 유틸리티
8.5.1 자바스크립트 질의 구성과 검증
8.5.2 특수 문자 처리
8.5.3 자바스크립트 사용방법
8.6 워드넷과 유의어
8.6.1 유의어 색인 구축하기
8.6.2 워드넷 유의어를 분석기로 옮기기
8.6.3 루씬으로 전화걸기
8.7 검색어 하일라이팅
8.7.1 CSS와 연계한 하일라이팅
8.7.2 Hits 하일라이팅
8.8 필터 연결
8.9 버클리 DB에 색인 저장
8.9.1 DbDirectory 코딩
8.9.2 DbDirectory 설치
8.10 샌드박스 코드 빌드
8.10.1 소스 체크아웃
8.10.2 샌드박스와 앤트
8.11 요약
9장 언어별 루씬
9.1 루씬과의 관계
9.2 C루씬
9.2.1 지원 플랫폼
9.2.2 API 호환성
9.2.3 유니코드 지원
9.2.4 성능
9.2.5 사용자층
9.3 닷루씬
9.3.1 API 호환성
9.3.2 색인 호환성
9.3.3 성능
9.3.4 사용자층
9.4 플루씬
9.4.1 API 호환성
9.4.2 색인 호환성
9.4.3 성능
9.4.4 사용자층
9.5 루피
9.5.1 API 호환성
9.5.2 색인 호환성
9.5.3 성능
9.5.4 사용자층
9.6 파이루씬
9.6.1 API 호환성
9.6.2 색인 호환성
9.6.3 성능
9.6.4 사용자층
9.7 요약
10장 사례 연구
10.1 너치
10.1.1 더 자세히 보자
10.1.2 너치의 다른 기능
10.2 jGuru의 루씬
10.2.1 주제어와 문서 분류
10.2.2 색인 구조
10.2.3 색인 필드
10.2.4 색인할 내용 준비
10.2.5 질의
10.2.6 JGuruMultiSearcher
10.2.7 기타
10.3 루씬과 서치블록스
10.3.1 왜 루씬인가?
10.3.2 서치블록스의 구조
10.3.3 검색 결과
10.3.4 다국어 지원
10.3.5 리포팅 엔진
10.3.6 요약
10.4 엑스트라마인드의 XM-InformationMinder
10.4.1 시스템 구조
10.4.2 루씬을 통해 얻은 것
10.5 앨리어스-i : 루씬으로 다루는 철자변이
10.5.1 앨리어스-i 애플리케이션의 아키텍처
10.5.2 철자변이
10.5.3 노이지 채널 모델을 이용한 철자교정
10.5.4 철자변이의 벡터 비교 모델
10.5.5 하위단어 루씬 분석기
10.5.6 정확도, 효율성, 그 밖의 애플리케이션
10.5.7 문맥 혼합
10.5.8 참고문헌
10.6 검색 예술 마이클스닷컴
10.6.1 본문 색인
10.6.2 컨텐츠 찾기
10.6.3 검색 통계
10.6.4 요약
10.7 루씬이 최고! 더서버사이드
10.7.1 검색 능력 키우기
10.7.2 고수준 구조
10.7.3 색인 구축
10.7.4 검색
10.7.5 설정: 모든 것을 관리하는 중심점
10.7.6 웹
10.7.7 요약
10.8 마치면서
부록 A 루씬 설치
A.1 바이너리 설치
A.2 명령행 데모 실행
A.3 웹 애플리케이션 데모 실행
A.4 소스 빌드
A.5 문제 해결
부록 B 루씬 색인 포맷
B.1 논리적 관점의 색인
B.2 색인 구조
B.3 색인파일 구조 선택
B.4 역파일 색인
B.5 요약
부록 C 참고 문헌
C.1 국제화
C.2 언어 감지
C.3 텀 벡터
C.4 루씬 포팅
C.5 사례 연구
C.6 문서 파서
C.7 기타 자료
C.8 IR 소프트웨어
C.9 더그 커팅의 논문
한국어판 특별 부록 D 루씬과 한글
D.1 기본 루씬의 한계
D.2 루씬 한글 분석기
D.3 한글 처리와 관련한 그 밖의 문제점
D.3.1 복합명사
D.3.2 한 글자 단어
D.3.3 어미 받침
줄거리
1부
기본편 (Core Lucene)
1부 기본편에서는 루씬의 기본 기능을 살펴본다. 루씬 홈페이지에서 루씬 프로그램 JAR 파일을 다운받아 직접 사용해 볼 수 있다.
1장 루씬과의 첫 만남에서는 루씬에 대한 개괄적인 설명과 함께 색인과 검색 기능을 갖는 간단한 프로그램을 살펴본다. 색인과 검색 등의 내용에 대한 자세한 설명은 다음 장에 차례로 이어지는데, 2장 색인에서는 자료와 문서를 색인하는 방법을, 3장 애플리케이션에 검색 추가하기에서는 기본적이고도 중요한 루씬의 검색 기능을 배울 수 있다. 4장 분석에서는 2장에서 간단히 다뤘던 내용을 확장해, 색인하고 검색하고자 하는 원문을 루씬이 어떻게 처리하는지를 알아본다. 루씬의 가장 중요한 기능은 검색이므로, 5장 고급 검색기법에서 루씬에 들어있는 좀더 다양한 검색 기능을 배운다. 마지막으로 6장 확장 검색에서는 여러분이 원하는 독특한 기능을 루씬과 연동할 수 있도록 루씬을 확장하는 방법을 살펴본다.
2부
고급편 (Applied Lucene)
루씬은 그 자체로 보면 단순한 JAR 파일 하나일 뿐이지만, 어떻게 사용하느냐에 따라 여러분에게 아주 유용한 툴이 될 수 있다. 2부 고급편에서는 루씬을 활용할 수 있는 다양한 방법을 살펴본다.
대부분의 프로젝트에서 마이크로소프트 워드 문서, PDF 문서, HTML 문서, XML 문서 등을 처리해야 하는 경우가 많은데, 7장 일반적인 문서 포맷 파싱에서는 독립적으로 재사용 가능한 문서 변환 프레임웍을 구성해서 다양한 문서의 내용을 루씬의 색인에 추가하는 방법을 살펴본다. 8장 툴과 확장기능에서는 루씬을 보조해서 추가적인 기능을 처리할 수 있도록 도와주는 도구들 가운데 특히 훌륭한 몇 가지를 추려서 살펴본다. 루씬 자체를 개발한 주 언어는 자바이지만 다른 언어에서도 루씬의 강력한 기능을 활용할 수 있도록 여러 언어로 만들어졌는데, 9장 언어별 루씬에서는 이처럼 루씬을 다른 프로그래밍 언어, 예를 들어 C++, C#, 파이썬 등의 언어로 만들어낸 프로젝트나 제품들을 살펴본다. 마지막으로 다양한 분야의 사람들이 기고한 10장 사례 연구를 통해 루씬의 능력을 활용해 목표를 달성했던 프로젝트에서 도대체 루씬을 어떻게 사용했는지에 대한 자세한 내막도 들어보자. |