1.     

  검색 엔진 개발에 앞서 검색 엔진의 작동원리 및 Open Source Lucene의 기능을 검토하여 적용 가능성 여부와 기능을 파악하고 앞으로의 개발 방향에 대하여 정리한다.

 

2.   검색 엔진의 작동 원리

1)   Crawler의 정보 수집

-       스파이더(spider) 혹은 크롤러(crawler)라고 불리는 로봇이 웹에 있는 웹 페이지를 방문해서 모든 내용을 읽어온다이 때 그 페이지만 방문하고 마는 것이 아니라 그 페이지에 링크되어 있는 또 다른 페이지를 차례대로 방문한다.

사용자 삽입 이미지




-       DB에 수집해온 그대로 저장하는 것이 아니라 검색에 적합하도록 일정한 가공을 거친다. DB에 저장되는 내용에는 문서의 제목본문링크 그리고 문서가 웹에서 차지하는 중요도 등이 있다.

 

2)   수집한 문서 가공과 색인 작업

-       검색엔진에서 가장 중요한 부분으로써 좋은 검색엔진을 만들기 위해 핵심이 되는 부분이다.

-       한글문서를 색인하고자 할 경우 얼마나 좋은 형태소 분석기를 가지고 있느냐가 색인 DB의 품질을 결정하게 된다.

-       먼저 수집된 문서를 적절하게 형태소 분석을 통하여 단어로 쪼갠다.

-       검색어의 빈도수와 위치(제목본문)등을 고려하여 중요도를 계산하여 이를 반영한다.

 

3)   정보 검색기

-       사용자가 입력한 검색어를 색인기에 넣어 색인어를 추출하고 그것을 사용하여 검색을 한다.

사용자 삽입 이미지




3. Lucene

사용자 삽입 이미지

1)   Lucene 소개

-       아파치 최상위 Project중에 하나로 http://lucene.apache.org에서 접할 수 있다.

-       Lucene은 강력한 기능뿐만 아니라 간단하기 때문에 IT업계에서 많이 사용된다.

-       루씬은 확장 가능한 고성능 정보검색(IR, Information Retrieval) 라이브러리이다루씬은 소프트웨어 프로그램에 색인과 검색 기능을 간단하게 추가할 수 있도록 지원한다.

-       루씬을 사용할 때 검색에 대한 전문적인 지식을 반드시 알 필요는 없다꼭 필요한 몇 가지 기본 클래스들을 사용하는 방법만 익히면 색인과 검색 기능을 직접 추가할 수 있다.

-       루씬은 독립 프로그램이 아닌 단순한 소프트웨어 라이브러리이다.

-       루씬은 프로그램에 텍스트 색인과 검색 기능을 추가할 수 있도록 지원한다.

 

2)   Doug Cutting(루씬의 창시자)이 제시한 lucene의 인덱싱과 검색을 적용 가능한 사례들

-       이메일 검색 : 저장된 메시지를 검색할 수 있고 새로 도착한 메시지를 색인에 추가할 수 있는 이메일 어플리 케이션

-       온라인 문서 검색 : 온라인 문서 또는 저장된 출판물을 검색할 수 있는 CD기반이나 웹 기반 또는 어플리케이션에 포함된 문서 판독기

-       웹 페이지 검색 : 사용자가 방문한 모든 웹 페이지를 색인화하기 위해 개인 검색 엔진을 만들 수 있는 웹 브라우저 또는 프록시 서버.

-       내용 검색 : 저장된 문서에서 특정 내용을 검색할 수 있는 애플리케이션.

-       버전 관리 및 컨텐트 관리 : 문서나 문서 버전을 색인화해서 쉽게 검색할 수 있는 문서 관리 시스템.

-       뉴스 및 유선(wire) 서비스 : 뉴스가 도착했을 때 기사를 색인할 수 있는 뉴스 서버나 릴레이 서버.

☞ Lucene을 사용하여 개발할 수 있다는 의미임각각에 대한 전용 라이브러리를 지원한다는 의미가 아님.


 

3)   Lucene을 사용했을 때의 모형도

 

사용자 삽입 이미지

-       빨간 점선을 기준으로 아래 부분이 루씬으로 할 수 있는 일들이고 위의 부분이 별도로 구연해야 할 부분이다.

 

4)   Lucene의 기능

-      색인을 저장할 수 있는 곳

n RAMDirectory : 컴퓨터의 메인 메모리를 색인 장소로 사용

n FSDirectory : 디스크의 파일 시스템에 색인을 저장 (가장 많이 사용)

n JDBCDirectory : DB를 색인 저장소로 사용하는 방법일반적으로 지원하지는 않지만 별도의 루씬 샌드박스라는 것을 통해 지원한다.

-      색인 기능 지원

-      검색 기능 지원

-       다양한 나라의 Full Text분석기(Analyzer) 지원(한글x)

-       Hadoop을 분산 파일 시스템으로 사용할 수 있음. (Nutch에서 사용중, Yahoo에서도 사용)

5)   Lucene Full Text 검색 엔진

-       실전에서는 단순한 문자열을 색인하는 것 보다는 다양한 문서를 색인화 하고 검색하는 작업이 더 빈번 할 것이다.

-       루씬을 이용해서 임의의 바이너리 파일을 직접 색인하고 검색할 수 없으며모두 문자열 형태로 변경된 이후에야 루씬으로 색인하고 검색할 수 있다.

-       XML, PDF, HTML, MS WORD와 같이 다양한 문서들을 색인화 하기 위해서는 각각의 문서를 Lucene Analyzer가 이해할 수 있도록 해석(parse)해서 텍스트로 추출해 내는 과정이 필요하다.

사용자 삽입 이미지

-       Parser를 지원하는 사이트

XML

Dom, Sax, JDom,

Piccolo (http://piccolo.sourceforge.net)

Apache Disester (http://jakarta.apache.org/commons/digester/)

PDF

PDFBox (http://www.pdfbox.org), IndexFiles (lucene built-in) ,

LucenePDFDocument (lucene built-in)

Xpdf (http://www.foolabs.com/xpdf)

JPedal (http://www.jpedal.org)

Etymon PJ( http://www.etymon.com)

Html

Jtidy (http://jtidy.sourceforge.net ), 
NekoHTML (
http://people.apache.org/~andyc/neko/doc/index.html)

HTMLParser( http://htmlparser.sourceforge.net)

MS Word

POI (http://jakarta.apache.org/poi )

Text Extractors( http://textmining.org )

Antiword ( http://www.winfield.demon.nl)

OpenOffice SDK ( http://www.openoffice.org )

 

6)   사용 가능한 언어

-       원래 자바로 만들어진 루씬은 펄(Perl)에서 시작해 파이썬(Python), C++와 닷넷(.NET)등의 언어로 포팅돼있고루비(Ruby)로 포팅하기 위한 작업도 진행중이다.

-       루씬은 서로 다른 언어간에도 색인 데이터를 100% 호환해서 사용할 수 있도록 설계되어있다.

 

4.   Nutch

1)   Nutch 소개

-       광고로 뒤덮인 인터넷 검색 사이트에서 상업적인 요소를 배제하고 검색 그 자체로의 검색을 구성하고자 진행된 오픈 소스 인터넷 웹 검색엔진 프로젝트

-       루씬을 이용하여 색인과 검색을 한다.

-       너치는 수 억개 이상의 웹페이지를 긁어 모아 색인하고 검색해볼 수 있게 해준다.

-       너치 시스템은 웹에 존재하는 문서(대략 10억에서 100억 개 정도)를 처리할 수 있도록 만들어졌고물론 문서가 아주 많기 때문에 1대보다는 여러 대의 서버에서 색인과 검색을 동시에 가동해야 한다.

 

2)   Nutch의 검색 구조

-       웹 서버가 사용자의 검색 요청을 받는다.

-       질의 핸들러가 검색어를 가공해서 다수의 색인 검색 서버로 전달한다.

-       질의 핸들러가 넘긴 검색어에 대해 여러 개의 색인 서버에서 결과가 나오는데 이 결과를 가장 점수가 높은 순서로 정렬한다.

-       만약 1~2초가 지난 후에 결과를 알려주지 않는 새인 서버가 있다면 결과에 포함하지 않고 무시한다. (사용자가 느끼기에2초안에 결과가 나오도록 보장)

3)   Nutch테스트

사용자 삽입 이미지
사용자 삽입 이미지


-       Crawling : http://www.hufs.ac.kr

-       검색어 : hufs



5.   Lucene으로 할 수 있는 일

-       내용을 검색하는 모든 분야에 Lucene을 적용할 수 있다.(우리는 Text Analyzer Lucene에 제시하면 LuceneIndex를 구성해 준다. Lucene의 api를 사용해서 검색할 수 있다)

-       대표적으로 Desktop 검색, E-mail 검색웹 페이지 검색

-       문제점 : 내용을 단어로 쪼개는 방법을 구현 해야함(형태소 분석기). 간단한 형태소 분석기는 루씬 인 액션” 책에서 소스를 공개하고 있음하지만 고급 형태소 분석기는 국어에 대한 이해를 기반으로 구현하는 것이 매우 어렵다고 한다.

 

6.   결론

-       Lucene Full Text를 검색하는데 효율적이다.

-       Full-Text(Contents) text를 단어로 쪼개는 방법(Analyzer)을 제시하면 알아서 Index를 구성해 주고 그것으로 빠른 검색 결과를 얻을 수 있다.

-       그러므로 내용검색을 위해서는 Lucene을 사용하면 효율적이지만 단지 Exact Match 검색을 한다면 Lucene은 불필요하다.


출처 - http://cherrykyun.tistory.com/148


'OpenSource > Common' 카테고리의 다른 글

OSGi - 서비스 개념  (0) 2012.10.08
OSGi - “Getting started with OSGi”의 번역  (0) 2012.10.08
루씬(Lucene) 개요 및 원리  (2) 2012.09.24
MINA 소개  (0) 2012.09.20
redis - redis 소개  (0) 2012.09.14
FOSS(Free and Open Source Software)  (0) 2012.04.28
Posted by linuxism

댓글을 달아 주세요

  1. 꼼즈 2013.03.04 14:58  댓글주소  수정/삭제  댓글쓰기

    언제나 검색엔진에 대해 고민할 때면 형태소 분석에서 딱 막히네요...
    제대로 된 한글 형태소분석기가 있으면 참 좋을텐데 말이죠~~ ^^
    좋은글 잘 읽고 갑니다.

  2. 긍정소년 2014.09.30 22:32 신고  댓글주소  수정/삭제  댓글쓰기

    lucene용 한국어 형태소 분석기가 있는거 같던데요~ 성능은 잘 모르겠습니다.
    https://github.com/need4spd/lucene-Korean-Analyzer