kuls발표(스타일)

Download Report

Transcript kuls발표(스타일)

Lucene을 이용한
Java Search Engine
Korea University Linux Society
순서
검색엔진
2. Lucene의 소개&쓰이는 곳
3. Lucene의 특징
4. Lucene의 주요 클래스
1.
1. 색인
2. 검색
5.
시연
검색엔진(1)

검색엔진: 컴퓨터 시스템에 있는 정보를
찾기 위해 고안된 정보 검색 체계
 컴퓨터 시스템: World Wide Web, 회사나 회
사 소유의 Network, 개인 컴퓨터 등

사용자: 특정 기준(일반적으로 단어나 구)
을 충족하는 콘텐트를 요청
 검색엔진: 그 기준에 부합하는 항목을 검
색하여 목록을 보여줌.
검색엔진(2)

검색엔진의 종류
 웹 위에서 정보를 찾는 검색엔진을 일반적으
로 일컬음
 인트라넷에서 쓰는 기업 검색엔진
 개인 검색엔진
 모바일 검색엔진 등

검색엔진의 선택이나 기준은 사용 환경
이나 용도에 따라 변함.
검색엔진(3)

Web Crawler
 웹에 있는 문서를 가져오기 위해 웹의 하이퍼
텍스트 구조를 자동으로 추적
 그러고 나서, 참조한 모든 문서를 재귀적으로
검색하는 프로그램
 검색엔진이 인터넷에 올라와 있는 웹 페이지
를 끌어 모아서 저장하는 수단
검색엔진 (4)

Indexer
 목적: Web Crawler에
서 수집한 모든 웹 페
이지를 검색
 역할: 웹 페이지의 중
요 키워드를 추출하고
이들의 상관관계나 문
서들의 상관관계를 정
의하여 스토리지에 저
장
검색엔진(5, Index이어서)

형태소 분석기
 의미를 담는 최소 단위인 형태소를 어절에서
분석하여 핵심 키워드를 추출하는 시스템(검
색엔진에서는 색인어 추출을 위해 특정 형태
소만 취함)

Inverted Indexing
 파일 시스템 혹은 DB와 같이 대량의 자료를
관리하는 곳에서 빠른 자료 검색을 위해 각
자료에 대한 색인 구성 파일을 생성.
검색엔진(6)

Searcher
 질의를 받으면 Indexer가 생성한 스토리지에
서 정의된 검색모델(랭킹 알고리즘)에 의해
유사한 문서를 추출.
 질의 분석기가 별도로 내장되어 있어야 하며
짧은 시간 내에 대량의 정보를 주어진 알고리
즘으로 계산하는 능력이 필요
Lucene (1)


Lucene 은 자유/오픈소스 정보 검색 라이브러
리(Information Retrieval, IR)
Dough Cutting이 Java로 구현했으며, 이후 여
러 언어로 이식되었음
 Perl, C#, C++, Python, Ruby, PHP…


아파치 소프트웨어 재단의 자카르타 프로젝트
에서 최상위 프로젝트로 조정되었음
Note: Lucene은 파일, 웹페이지를 바로 검색하
게 하는 검색 프로그램이 아니라, 단순한 소프
트웨어 라이브러리(검색 툴박스)이다.
Lucene(2, 역사)
버전
0.01
1.0
1.0b
발표일
2000년 3월
2000년 10월
2001년 7월
1.2
2002년 6월
1.3
2003년 12월
복합 파일 색인, 개선된 쿼리 파서, 원격 검색, 토큰
위치 관리, 확장 가능한 순위점수 API
1.4
2004년 7월
결과 정렬 기능, 스팬 질의, 텀벡터 이용가능, 새로
운 특징과 버그 수정, 성능 향상
1.4.1
2004년 10월
결과 정렬 기능의 속도 문제 수정
1.4.2.
2004년 10월
IndexSearcher 클래스 최적화, 기타 오류 수정
최초발표
비고
소스 포지에서의 최종 버전
아파치 자카르타 프로젝트에서의 최초 버젼
Lucene (3, 역사)
1.4.3
1.9
1.9.1
2.0.0
2.1
2004년 겨울 기타 오류 수정
2004년 12월 Lucene in Action 출판
자카르타 프로젝트에서 최고 레벨로 이동, 소스코드
2005년 2월
저장소를 서브버전으로 바꿈
Apache Conference에서의 Lucene (텀벡터, 스팬쿼
2005년 8월
리, 모두 함께 묶기, 사례연구(자연어처리)
2006년 1월
매일밤 빌드된 결과물의 사용가능
1.9 최종 버전 이용가능, 새로운 특징과 버그 수정,
2006년 2월
성능 향상
2006년 3월
1.9 최종 버전의 심각한 버그 수정
API 변화(depracated method의 삭제), 커맨드 라인
2006년 5월
툴 등의 추가, 버그 수정
2006년 12월 Forrest에 기반한 새 사이트 공개
2.1 버전 공개(새로운 특징 추가, 성능 향상, 버그 수
2007년 2월
정)
Apache Conference(EU,Amsterdam)에서 '루씬으로
2007년 2월
전문 검색하기'라는 주제로 발표됨
Lucene(4, 쓰이는 곳)
Lucene의 특징


범위성 있는 (Scalable) 고급 수행 색인
 적은 램을 요구함 (오직 1MB heap)
 일괄 색인처럼 빠른 증분 색인
 색인된 텍스트의 크기의 20~30%로 생성되는 색인
강력하고, 정확하며, 효율적인 검색 알고리즘
 등급이 매겨지는 검색(최상의 결과를 처음 리턴)
 다수의 강력한 질의 타입: 구 질의, 와일드카드 질의, 근접
질의, 범위 질의 등.
 날짜 범위 검색, 어느 필드로든 정렬 가능
 합쳐진 결과로 다중 색인 검색
 갱신과 검색을 동시에 허락
Lucene의 특징(이어서)

크로스플랫폼 솔루션
 아파치 라이센스하에서 영리용과 오픈소스
프로그램에서 사용을 허락하는 오픈소스 소
프트웨어
 100% 순수 자바
 색인이 호환이 되면서, 다른 프로그래밍 언어
로 구현된 것이 쓸 수 있음
주요 클래스(색인)



IndexWriter: 색인을 만들고, 색인에 문서를 추가할 때 사
용(삭제 기능은 IndexReader에 있음)
Directory: directory를 상속받은 색인 파일 관리 클래스를
만들면 색인 데이터를 저장함
 기본: RAMDirctory, FSDirectory
 루씬 샌드박스(루씬 활용 기능):JDBCDirectory
Analyzer: 텍스트의 단어를 루씬에서 활용하는 토큰
(Token 클래스)으로 분리함, 검색의 속도나 품질을 좌우
함
 불용어(stop words eg. a,, an, the, is…)처리
 모든 영문자를 소문자로 바꾸는 처리
주요 클래스(색인)
IndexWriter
Directory
index
Storage
(RAM, FS,
DB…)
Constructor Method:
public IndexWriter(D
irectory d, Analyzer a,
boolean create)
Analyzer
Text -> Token 1,
Token 2…Token n
주요 클래스(색인 이어서)

Document: 색인에 추가할 데이터의 기본
단위. 문서 구성 양식에 따라 검색 성능에
영향.
 주의: 루씬은 일반 텍스트 문자열만을 다룸
 서식 있는 문서파일, 프리젠테이션 파일 등을
변환하려면 java.lang.String이나
java.io.Reader로 변환해야 함.
 여러 문서 포맷을 읽어 들이는 다양한 툴이
만들어져 있음. (핵심 라이브러리에 미포함)
주요 클래스(색인 이어서)

Field: 검색할 때에 검색어를 어느 필드에서 찾을 것
인지 가리킬 수 있으므로, 검색결과의 품질과 관련
이 있음
 Keyword: 날짜, 사람 이름과 같이 변경되면 안 되
는 정보.
 UnIndexed: 주로 검색 결과에 나타내기 위한 내
용과, 요약문을 보여주기 위한 본문, 웹페이지의
URL 등을 보관.
 UnStored: 큰 사이즈의 텍스트를 색인하고 검색
할 때 화면에 보여줄 필요가 업다면 효과적.
 Text: 타입이 java.lang.String의 경우 색인에 저
장하나, java.io.Reader인 경우 저장하지 않음.
각 필드에 따른 기능 작동 여부
필드 생성 메소드
분석
여부
검색 가능
여부
저장 사용 사례
여부
Field.Keyword
(String,String)
Field Keyword(String, date)
X
O
O
전화번호.
URL,, 사람
이름 , 주민
등록번호, 날
짜
Field.UnIndexed(String, String)
X
X
O
문서 제목이
나 본문
Field.UnStored(String, String)
O
O
X
``
Field.Text(String, String)
O
O
O
``
Field.Text(String, Reader)
O
O
X
``
주요 클래스(검색)
IndexSearcher: 색인 검색을 담당하며 색
인을 ‘읽기 전용’으로 사용
 Term: 색인의 내부에서 단어를 의미하는
기본적 요소
 Query: 검색어를 지정하는 역할
 TermQuery: 특정 이름의 필드에 지정한
단어가 포함되어 있는지 찾을 때 사용
 Hits: 검색한 결과를 수집하는 역할.

주요 클래스(검색 이어서)
IndexWriter
Directory
Storage
Index 1,
Index 2,
…Index n
Analyzer
Hits
결과문서 ID 1 결
과문서 ID 2
…결과문서 ID n
Text -> Token 1,
Token 2…Token n
Query
(Abstract class)
Term Query
(Term: 단어 텍스트,
Field name)
Index
Searcher
시연을 시작하겠습니다.
Reference
1.
2.
3.
4.
5.
Search engine. (2007, May 13). In Wikipedia, The Free
Encyclopedia. Retrieved 17:46, May 14, 2007, from
http://en.wikipedia.org/w/index.php?title=Search_engine&oldid=13
0542384
Lucene. (2007, May 9). In Wikipedia, The Free Encyclopedia.
Retrieved 19:47, May 14, 2007, from
http://en.wikipedia.org/w/index.php?title=Lucene&oldid=12957869
7
루씬 인 액션. 오티스 고스포드네티치, 에릭 해쳐. 강철구, 주성진,
이문호. 에이콘출판주식회사(서울:2005).
http://www.freesearch.pe.kr/448
http://www.developer.com/java/other/article.php/3490471
감사합니다.