오픈소스 자바 검색엔진 정복 (세트)
- 지은이마이클 맥캔들리스, 에릭 해쳐, 오티스 고스포드네티치, 라팔 쿠크
- 옮긴이: 강철구, 박재호, 이해영
- ISBN : 9788960775565
- 75,000원
- 2014년 05월 14일 펴냄 (절판)
- 페이퍼백 | 1,184쪽 | 188*250mm
- 시리즈 : 오픈소스 프로그래밍
판매처
- 현재 이 도서는 구매할 수 없습니다.
책 소개
세트 구성: 전2권
대표적인 오픈소스 자바 검색엔진 루씬(Lucene)과 아파치 솔라(Apache Solr)를 마스터할 수 있는 세트
1) 『(개정판) 루씬 인 액션: 고성능 오픈소스 자바 검색엔진』
2) 『아파치 Solr 4 구축과 관리: 오픈소스 루씬 기반 엔터프라이즈 검색 플랫폼』
『(개정판) 루씬 인 액션』 소개
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#, 파이썬, 펄 등의 언어로 루씬을 사용해도 기본개념과 주요기능은 자바 버전과 거의 같으므로 별다른 어려움 없이 적용할 수 있을 것이다.
『아파치 Solr 4 구축과 관리』 소개
이 책은 검색과 관련된 기본 프레임워크를 제공하는 아파치 루씬(Apache Lucene)을 기반으로 만들어진 전문 검색 엔진인 솔라(Solr)를 사용하는 과정에서 자주 발생하는 문제와 고민을 풀어준다. 솔라 설정부터 색인과 자료 분석, 질의 방법을 비롯해 성능 개선과 클라우드 활용까지 빠짐없이 다루고 있기에, 솔라를 사용해 검색 기능을 구현하고 서비스가 필요한 상황에 딱 맞는 책이다. 검색이 필요하다면 이 책을 읽고 솔라로 시작해보자.
『아파치 Solr 4 구축과 관리』에서 다루는 내용
■ 아파치 솔라 4를 효율적으로 설정하는 방법
■ 형태와 형식이 다양한 자료를 색인하는 방법
■ 다양한 자동 완성 기능을 구현하는 방법
■ 아파치 솔라 4로 실시간 검색을 하는 방법
■ 성능을 높이기 위해 아파치 솔라의 성능을 측정하고 개선하는 방법
■ SolrCloud 기능에 통달하는 방법
■ 아파치 솔라 4의 문제를 분석하고 해결하는 방법
■ 질의 적합성을 개선하는 방법
■ 자료를 분석할 때 부딪히는 일반적인 문제를 극복하는 방법
『아파치 Solr 4 구축과 관리』의 대상 독자
아파치 솔라를 사용하는 사람, 아파치 솔라로 소프트웨어를 개발하며 그 과정에서 흔히 발생하는 문제의 해결책이 궁금한 개발자를 위한 책이다. 아파치 루씬을 알면 더 좋으나 필수는 아니다.
목차
목차
- 『(개정판) 루씬 인 액션』
- 1부 루씬 기초
- 1장 루씬과의 만남
- 1.1 정보 홍수의 시대
- 1.2 루씬이란?
- 1.2.1 루씬으로 처리하기 좋은 기능
- 1.2.2 루씬의 역사
- 1.3 루씬과 검색 애플리케이션의 구조
- 1.3.1 색인 과정 구성 요소
- 1.3.2 검색 과정 구성 요소
- 1.3.3 검색 애플리케이션의 나머지 요소
- 1.3.4 루씬과 검색 애플리케이션
- 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 TopDocs
- 1.7 정리
- 2장 색인
- 2.1 루씬 데이터 모델
- 2.1.1 문서와 필드
- 2.1.2 유연한 스키마
- 2.1.3 비정규화
- 2.2 색인 절차
- 2.2.1 텍스트 추출과 문서 생성
- 2.2.2 분석
- 2.2.3 색인에 토큰 추가
- 2.3 기본 색인 작업
- 2.3.1 색인에 문서 추가
- 2.3.2 색인에서 문서 삭제
- 2.3.3 색인의 문서 변경
- 2.4 필드별 설정
- 2.4.1 색인 관련 설정
- 2.4.2 필드의 원문 저장 관련 설정
- 2.4.3 텀 벡터 관련 설정
- 2.4.4 Reader, TokenStream, byte[] 필드
- 2.4.5 유용한 필드 설정 조합
- 2.4.6 정렬 관련 설정
- 2.4.7 다중 값 필드
- 2.5 문서와 필드 중요도
- 2.5.1 문서 중요도
- 2.5.2 필드 중요도
- 2.5.3 norm
- 2.6 숫자, 날짜, 시각 색인
- 2.6.1 숫자 색인
- 2.6.2 날짜, 시각 색인
- 2.7 필드 길이
- 2.8 준실시간 검색
- 2.9 색인 최적화
- 2.10 여러 종류의 Directory
- 2.11 병렬 처리, 스레드 안전성, 락
- 2.11.1 스레드와 다중 JVM 안전성
- 2.11.2 원격 파일 시스템의 색인 공유
- 2.11.3 색인 락
- 2.12 색인 작업 디버깅
- 2.13 고급 색인 기법
- 2.13.1 IndexReader에서 문서 삭제
- 2.13.2 삭제된 문서가 차지하는 디스크 공간
- 2.13.3 문서 버퍼, 플러시
- 2.13.4 색인 커밋
- 2.13.5 ACID 트랜잭션과 색인의 일관성
- 2.13.6 병합
- 2.14 정리
- 2.1 루씬 데이터 모델
- 3장 검색
- 3.1 간단한 검색 기능 구현
- 3.1.1 텀 검색
- 3.1.2 QueryParser로 사용자가 입력한 검색어 파싱
- 3.2 IndexSearcher 활용
- 3.2.1 IndexSearcher 인스턴스 생성
- 3.2.2 검색 실행
- 3.2.3 TopDocs 결과 활용
- 3.2.4 결과 페이지 이동
- 3.2.5 준실시간 검색
- 3.3 연관도 점수
- 3.3.1 점수 계산
- 3.3.2 explain() 메소드로 점수 내역 확인
- 3.4 다양한 종류의 질의
- 3.4.1 TermQuery 텀 검색
- 3.4.2 TermRangeQuery 텀 범위 검색
- 3.4.3 NumericRangeQuery 숫자 범위 검색
- 3.4.4 PrefixQuery 접두어 검색
- 3.4.5 BooleanQuery 불리언 질의
- 3.4.6 PhraseQuery 구문 검색
- 3.4.7 WildcardQuery 와일드카드 검색
- 3.4.8 FuzzyQuery 비슷한 단어 검색
- 3.4.9 MatchAllDocsQuery 모든 문서 조회
- 3.5 QueryParser로 질의 표현식 파싱
- 3.5.1 Query.toString
- 3.5.2 TermQuery
- 3.5.3 텀 범위 검색
- 3.5.4 숫자와 날짜 범위 검색
- 3.5.5 접두어 질의와 와일드카드 질의
- 3.5.6 불리언 연산자
- 3.5.7 구문 질의
- 3.5.8 퍼지 검색
- 3.5.9 MatchAllDocsQuery
- 3.5.10 질의 그룹
- 3.5.11 필드 선택
- 3.5.12 하위 질의에 중요도 지정
- 3.5.13 과연 QueryParser를 사용해야 하는가?
- 3.6 정리
- 3.1 간단한 검색 기능 구현
- 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 TokenFilter 순서의 중요성
- 4.3 루씬 내장 분석기
- 4.3.1 StopAnalyzer
- 4.3.2 StandardAnalyzer
- 4.3.3 어떤 분석기를 사용해야 할까?
- 4.4 유사 발음 검색
- 4.5 유사어 검색
- 4.5.1 유사어 분석기 작성
- 4.5.2 토큰 위치 증가 값 확인
- 4.6 기본형 분석기
- 4.6.1 StopFilter와 빈 공간
- 4.6.2 기본형 찾기와 불용어 처리 방법 변경
- 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.8.5 Zaijian
- 4.9 너치 분석
- 4.10 정리
- 4.1 분석기 활용
- 5장 고급 검색 기법
- 5.1 필드 캐시
- 5.1.1 모든 문서의 필드 값 불러오기
- 5.1.2 세그먼트별 IndexReader
- 5.2 검색 결과 정렬
- 5.2.1 필드 값으로 정렬
- 5.2.2 연관도 순서 정렬
- 5.2.3 색인 순서 정렬
- 5.2.4 필드 값으로 정렬
- 5.2.5 정렬 순서 변경
- 5.2.6 여러 필드의 값으로 정렬
- 5.2.7 정렬할 필드 자료형 선택
- 5.2.8 정렬할 로케일 지정
- 5.3 MultiPhraseQuery 활용
- 5.4 여러 개의 필드를 동시에 검색
- 5.5 스팬 질의
- 5.5.1 SpanTermQuery
- 5.5.2 필드의 맨 앞부분 검색
- 5.5.3 일정 범위 안에 위치한 스팬 검색
- 5.5.4 겹치는 부분을 결과에서 제외
- 5.5.5 SpanOrQuery
- 5.5.6 스팬 질의와 QueryParser
- 5.6 검색 필터
- 5.6.1 TermRangeFilter
- 5.6.2 NumericRangeFilter
- 5.6.3 FieldCacheRangeFilter
- 5.6.4 특정 텀으로 필터링
- 5.6.5 QueryWrapperFilter
- 5.6.6 SpanQueryFilter
- 5.6.7 보안 필터
- 5.6.8 필터와 BooleanQuery
- 5.6.9 PrefixFilter
- 5.6.10 필터 캐시
- 5.6.11 필터를 질의로 변환
- 5.6.12 필터에 필터 적용
- 5.6.13 내장 필터에서 제공하지 않는 기능
- 5.7 함수 질의와 연관도 점수
- 5.7.1 함수 질의 클래스
- 5.7.2 최근 문서에 중요도를 높게 부여하는 함수 질의
- 5.8 다수의 루씬 색인 검색
- 5.8.1 MultiSearcher
- 5.8.2 스레드를 활용하는 ParallelMultiSearcher
- 5.9 텀 벡터 활용
- 5.9.1 비슷한 책 조회
- 5.9.2 자동 분류
- 5.9.3 TermVectorMapper
- 5.10 FieldSelector로 필드 선택
- 5.11 검색 중단
- 5.12 정리
- 5.1 필드 캐시
- 6장 검색 기능 확장
- 6.1 정렬 기능 직접 구현
- 6.1.1 색인 시점에 필요한 준비
- 6.1.2 거리 기준 정렬 기능 구현
- 6.1.3 정렬할 때 계산한 값 활용
- 6.2 Collector 클래스 직접 구현
- 6.2.1 Collector 클래스
- 6.2.2 Collector 직접 구현: BookLinkCollector
- 6.2.3 AllDocCollector
- 6.3 QueryParser 확장
- 6.3.1 QueryParser의 기능 변경
- 6.3.2 퍼지와 와일드카드 질의 제한
- 6.3.3 숫자 범위 질의 처리
- 6.3.4 날짜 범위 질의 처리
- 6.3.5 순서가 정해진 구문 질의
- 6.4 필터 직접 구현
- 6.4.1 필터 구현
- 6.4.2 직접 구현한 필터 적용
- 6.4.3 필터를 적용하는 다른 방법: FilteredQuery
- 6.5 적재
- 6.5.1 분석과 적재
- 6.5.2 검색 중 적재된 값 활용
- 6.5.3 스팬 질의와 적재
- 6.5.4 TermPositions로 적재된 내용 확보
- 6.6 정리
- 6.1 정렬 기능 직접 구현
- 2부 고급 루씬
- 7장 티카로 텍스트 추출
- 7.1 티카란?
- 7.2 티카의 논리적인 구조와 API
- 7.3 티카 설치
- 7.4 티카에 내장된 텍스트 추출 도구
- 7.5 텍스트 추출 기능 활용
- 7.5.1 루씬 문서 색인
- 7.5.2 Tika 도우미 클래스
- 7.5.3 파서 선택
- 7.6 티카의 한계
- 7.7 XML 색인
- 7.7.1 SAX 파싱
- 7.7.2 아파치 커먼스 다이제스터
- 7.8 티카의 대안
- 7.9 정리
- 8장 필수 확장 기능
- 8.1 루크
- 8.1.1 Overview 탭: 색인 개요
- 8.1.2 문서 조회
- 8.1.3 QueryParser를 사용해 검색
- 8.1.4 파일과 플러그인
- 8.2 분석기와 토큰 필터
- 8.2.1 스노볼 분석기
- 8.2.2 N그램 필터
- 8.2.3 싱글 필터
- 8.2.4 contrib 모듈 분석기 활용
- 8.3 검색 질의 하이라이팅
- 8.3.1 하이라이팅 모듈
- 8.3.2 단독 실행 예제
- 8.3.3 CSS 하이라이팅
- 8.3.4 검색 결과 하이라이팅
- 8.4 FastVectorHighlighter
- 8.5 검색어 추천
- 8.5.1 추천 검색어 후보 추출
- 8.5.2 최적의 추천 단어 선택
- 8.5.3 추천 검색어를 화면에 표시
- 8.5.4 추천 기능을 개선할 아이디어
- 8.6 특이한 Query
- 8.6.1 MoreLikeThis
- 8.6.2 FuzzyLikeThisQuery
- 8.6.3 BoostingQuery
- 8.6.4 TermsFilter
- 8.6.5 DuplicateFilter
- 8.6.6 RegexQuery
- 8.7 contrib 모듈 빌드
- 8.7.1 소스코드 확보
- 8.7.2 contrib 디렉토리에서 ant 실행
- 8.8 정리
- 8.1 루크
- 9장 추가 확장 기능
- 9.1 필터 연결
- 9.2 버클리DB Directory
- 9.3 워드넷 유의어 사전
- 9.3.1 유의어 색인 구축
- 9.3.2 분석기에서 워드넷 유의어 활용
- 9.4 메모리 기반 색인
- 9.5 XML QueryParser
- 9.5.1 XmlQueryParser 활용
- 9.5.2 XML 질의 문법 확장
- 9.6 서라운드 질의 언어
- 9.7 지리적인 위치 정보 검색
- 9.7.1 지리 정보 색인
- 9.7.2 공간 정보 검색
- 9.7.3 위치 정보 검색과 성능
- 9.8 원격 서버의 여러 색인 검색
- 9.9 유연한 QueryParser
- 9.10 작고 다양한 확장 기능
- 9.11 정리
- 10장 다른 언어에서 루씬 활용
- 10.1 포팅이란?
- 10.1.1 장단점
- 10.1.2 적당한 포팅 방법 선택
- 10.2 CLucene(C++)
- 10.2.1 개발 동기
- 10.2.2 API와 색인 호환성
- 10.2.3 지원하는 플랫폼
- 10.2.4 현황과 미래
- 10.3 루씬닷넷(C#와 다른 닷넷 언어)
- 10.3.1 API 호환성
- 10.3.2 색인 호환성
- 10.4 키노서치, 루씨(펄)
- 10.4.1 키노서치
- 10.4.2 루씨
- 10.4.3 기타 펄 루씬 프로젝트
- 10.5 페렛(루비)
- 10.6 PHP
- 10.6.1 Zend 프레임워크
- 10.6.2 PHP Bridge
- 10.7 파이루씬(파이썬)
- 10.7.1 API 호환성
- 10.7.2 기타 파이썬 루씬 프로젝트
- 10.8 솔라(다양한 프로그래밍 언어)
- 10.9 정리
- 10.1 포팅이란?
- 11장 루씬 관리와 성능 튜닝
- 11.1 성능 최적화
- 11.1.1 간단한 최적화 방법
- 11.1.2 성능 측정
- 11.1.3 색인 후 검색까지 걸리는 시간 최적화
- 11.1.4 색인 속도 최적화
- 11.1.5 검색 처리량과 대기 시간 최적화
- 11.2 스레드와 병렬 처리
- 11.2.1 병렬 색인
- 11.2.2 병렬 검색
- 11.3 자원 관리
- 11.3.1 디스크
- 11.3.2 파일 식별자
- 11.3.3 메모리
- 11.4 색인 백업
- 11.4.1 백업
- 11.4.2 복원
- 11.5 일반적인 오류
- 11.5.1 깨진 색인
- 11.5.2 색인 수리
- 11.6 정리
- 11.1 성능 최적화
- 3부 사례 연구
- 12장 사례 연구 1: 크루글
- 12.1 크루글 소개
- 12.2 장비의 구조
- 12.3 검색 성능
- 12.4 소스코드 해석
- 12.5 부분 문자열 검색
- 12.6 질의, 검색
- 12.7 개선 방안
- 12.7.1 필드 캐시 메모리 사용량
- 12.7.2 색인 통합
- 12.8 정리
- 13장 사례 연구 2: SIREn
- 13.1 소개
- 13.2 효과
- 13.2.1 모든 필드를 검색
- 13.2.2 효율적인 단일 어휘
- 13.2.3 유연한 필드
- 13.3 SIREn으로 엔티티 색인
- 13.3.1 데이터 모델
- 13.3.2 구현 관련 문제
- 13.3.3 색인 스키마
- 13.3.4 색인 전 데이터 준비
- 13.4 엔티티 검색
- 13.4.1 내용 검색
- 13.4.2 셀 내부 검색
- 13.4.3 셀을 튜플로 묶음
- 13.4.4 엔티티 설명 질의
- 13.5 SIREn과 솔라 연동
- 13.6 성능 측정
- 13.7 정리
- 14장 사례 연구 3: 링크드인
- 14.1 보보 브라우즈와 다면 검색
- 14.1.1 보보 브라우즈 설계
- 14.1.2 고급 기능 활용
- 14.2 조이 실시간 검색
- 14.2.1 조이 시스템 구조
- 14.2.2 실시간과 준실시간
- 14.2.3 문서와 색인 요청
- 14.2.4 IndexReader 직접 작성
- 14.2.5 루씬의 준실시간 검색과 비교
- 14.2.6 분산 검색
- 14.3 정리
- 14.1 보보 브라우즈와 다면 검색
- 부록
- 부록 A 루씬 설치
- 부록 B 루씬 색인 구조
- 부록 C 루씬 성능 측정
- 부록 D 참고 문헌
- 『아파치 Solr 4 구축과 관리』
- 1장 아파치 솔라 설정
- 개요
- 제티에서의 솔라 실행
- 아파치 톰캣에서의 솔라 실행
- 데이터 클러스터링
- 올바른 디렉토리 구현 선택
- 자체 색인을 사용하지 않게 철자 검사기 설정
- 솔라 캐시 구성
- 웹 페이지를 가져와 색인하는 방법
- 추출 요청 처리기 설정 방법
- 기본 유사성 구현 변경
- 2장 자료 색인
- 개요
- PDF 파일 색인
- 고유 필드 자동 생성
- 이진 파일에서의 메타데이터 추출
- JDBC로 자료 추출 처리기 구성
- 자료 추출 처리기로 데이터베이스에서 자료 색인
- 자료 추출 처리기와 델타 질의로 자료를 추출하는 방법
- URL 데이터 소스로 자료 추출 처리기를 사용하는 방법
- 자료 추출 처리기로 가져오며 자료를 수정하는 방법
- 문서의 단일 필드 갱신
- 여러 통화 처리
- 문서 언어 알아내기
- 기본 키 필드 색인 최적화
- 3장 텍스트 자료 분석
- 개요
- 페이로드를 이용한 추가 정보 저장
- 텍스트에서 XML 태그와 HTML 태그의 제거
- 한 필드 내용을 다른 필드로 복사
- 단어를 다른 단어로 변경
- 카멜 케이스(CamelCase)로 텍스트 분할
- 여백으로만 텍스트 분할
- 어간 추출 없이 복수 단어를 단수로 만들기
- 문자열 전체를 소문자로 만들기
- 색인에 지리적 위치 저장
- 자료에서 어간 추출
- 효율적인 문자열 끝 와일드카드 검색을 위한 텍스트 준비
- 숫자와 비 여백 문자로 텍스트 분할
- 훈스펠을 어간 추출기로 사용
- 자신만의 어간 사전 사용
- 어간 추출 방지
- 4장 솔라 질의
- 개요
- 특정 필드 값 조회
- 필드 값으로 결과 정렬
- 단어가 아니라 구문으로 검색
- 단어보다 구문 우선 검색
- 특정 문서 우선 반환
- 단어 거리가 가까운 문서 우선 반환
- 한 지점에서 거리로 결과 정렬
- 부분 일치로만 문서 가져오기
- 함수로 점수 계산에 영향 주기
- 질의 중첩
- 반환된 문서 수정
- 부모-자식 관계 사용
- 성능 관점에서의 오타 무시
- 중복 문서 감지 및 무시
- 필드 앨리어스 사용
- 결과에 함수 값 반환
- 5장 패싯 메커니즘 사용
- 개요
- 필드 값이 같은 문서 수 가져오기
- 값 범위가 같은 문서 수 가져오기
- 질의와 하위 질의에 일치하는 문서 수 가져오기
- 패싯 결과에서 필터 제거
- 알파벳순으로 패싯 결과 정렬
- 패싯을 이용한 자동 완성 기능 구현
- 필드 값이 없는 문서 수 가져오기
- 한 질의에서 두 필드에 다른 패싯 제한 주기
- 결정 트리 패싯 사용
- 연관 그룹에서 가장 적합한 문서에 대한 패싯 계산
- 6장 솔라 성능 개선
- 개요
- 결과 페이지 전환 속력 높이기
- 문서 캐시 구성
- 질의 결과 캐시 구성
- 필터 캐시 구성
- 시작 혹은 커밋 직후의 솔라 성능 개선
- 캐시에 전체 결과 페이지 저장
- 고윳값 수가 작은 필드에 대한 패싯 작업 성능 개선
- 색인 과정에서 솔라 성능 저하 시 대처 방법
- 질의 성능 분석
- 필터 캐시 저장 피하기
- 필터 질의 실행 순서 제어
- 숫자 범위 질의 성능 개선
- 7장 클라우드를 위한 솔라
- 개요
- 새로운 SolrCloud 클러스터 생성
- 단일 클러스터 내부에 2개의 컬렉션 설정
- SolrCloud 클러스터 관리
- SolrCloud 클러스터 관리 GUI의 이해
- 분산 색인과 검색
- 이미 존재하는 라이브 클러스터에 레플리카 수 늘이기
- 샤드 사이에서 자동화된 문서 배포 멈추기
- 8장 솔라의 다양한 기능
- 개요
- 결과 목록에 반환된 문서와 유사한 문서 더 얻기
- 일치된 단어의 강조
- 긴 텍스트 필드를 강조하고 좋은 성능을 얻는 방법
- 함수 값으로 결과 정렬
- 발음에 따른 단어 검색
- 정의된 단어의 무시
- 검색 결과의 통계 계산
- 사용자의 오타 점검
- 결과를 그룹으로 묶기 위한 필드 값 사용
- 결과를 그룹으로 묶기 위한 질의 사용
- 결과를 그룹으로 묶기 위한 함수 질의 사용
- 9장 문제 해결
- 개요
- 너무 많이 열린 파일 처리
- 메모리 부족 문제 해결
- 비영어권 자료의 적절한 정렬
- 색인을 작게 만들기
- 솔라 문제 진단
- 스와핑 피하기
- 부록: 실제 상황