유용한 정보

OPEN Source를 이용한 검색엔진 개발(1)

CyberI 2019. 3. 12. 12:49

OPEN Source를 이용하여 자체적으로 검색엔진을 개발한 내용입니다

검색엔진 제작을 위한 개요 부분과 수집, 색인, 검색에 대한 내용으로 2번에 걸쳐 내용을 공유하도록 하겠습니다

 

 

검색엔진이란?  

용자가 필요로 하는 정보를 수집하여 내용을 분석한 뒤 찾기 쉬운 형태로 조직하여(색인), 정보에 대한 요구가 발생할 때 해당 정보를 빠르게 찾아 제공(검색)하는 시스템이나 프로그램

 

검색엔진의 구조

 

1. 수집: 검색엔진의 목적에 맞게 사용자가 필요로 하는 정보를 준비하는 과정

    - 대부분의 오픈소스 검색엔진 솔루션에서는 DB, File(doc, xls, pdf ), Log에 존재하는 데이터를 

      수집하는 기능을 제공

    - Web page의 경우는 크롤링을 이용

2. 색인: 수집된 내용을 분석하여 특정 데이터를 빠르게 찾을 수 있도록 저장하는 과정

   - 형태소 분석을 통해 최소 단위의 의미 있는 단어(Term) 추출

   - 역색인(Inverted Index) 방식으로 데이터를 저장

 

                i.  대용량 텍스트 검색을 위해서 고안된 방법

 

               ii.  특정 주제를 대상으로 매핑하는 색인과 반대되는 개념으로 의미가 있는 단어를 기준으로 매핑

 

              iii.  역색인 방식이 Full Text Search에 훨씬 유리하고 빠름

    - 형태소 분석(의미를 가지는 최소 단위를 분리하는 과정 (Tokenizer +Filter))

     

구분  RDBMS  검색엔진
 데이터 저장 방식 정규화 역정규화
 전문(Full Text) 검색 속도 느림  빠름
 의미 검색  불가능  가능
 JOIN  가능  불가능
 수정 / 삭제 속도  빠름  느림

 

3. 검색: 사용자로부터 검색 요청을 받아 검색 결과를 변환하는 과정

   - 사용자가 검색 최상의 결과를 위해 랭킹 알고리즘이 중요

   - TF-IDF(Term Frequency - Inverse Document Frequency)

     i. 특정 단어가 문서 내에 얼마나 자주 등장하는 지를 나타내는 TF

     ii. 특정 단어가 전체 문서에서 얼마나 자주 등장하는지(흔한지)를 나타내는 IDF

 

검색엔진 개발을 위한 Open Source

1. Apache Lucene

   - 색인과 검색 기능을 제공하는 자바 언어로 만들어진 오픈소스 정보검색(Information Retrieval)* 라이브러리임

   - 독립된 프로그램이 아닌 소프트웨어 라이브러리로 Lucene 라이브러리만을 사용해 검색 서비스를 

     구현하기 위해선 추가적인 개발이 필요

 

2. Apache Solr, Elasticsearch

   - Apache Lucene 기반으로 검색 서비스를 위한 다양한 기능들이 포함되어 만들어진 오픈소스 검색엔진 솔루션

   - HTTP 요청에 대한 처리와 응답을 하는 웹 기반

   - 기본적인 UI를 제공하고 독립적인 서버로 구현되어 있기 때문에 사용에 용이

 

 구분  Apche Solr  Elasticsearch
 주요 활용영역  문서 원문 검색  상품 검색 / 이상징후 감지 
 & 모니터링
 색인방식  전체 데이터를 수정  수정된 데이터만을 수정
 검색 속도  느림  빠름
 색인 속도  느림  빠름
 장점  안정화된 오픈소스 
 장문 데이터 검색에 용이
 실시간 색인 가능
 검색, 색인 속도가 상대적으로 빠름
 단점  검색, 색인 속도가 상대적으로 느림  장문 데이터 검색 시 속도 저하

 

3. Apache Nutch

   - Apache Lucene 기반으로 만들어진 웹 크롤러 솔루션

   - 독립적으로 수집, 색인, 검색 기능

   - Solr나 Elasticsearch와 같이 UI를 제공하지 않고 검색 기능도 다양하지 못해 주로 웹 페이지 

     크롤링을 목적으로 사용

 

일반적인 검색엔진 서버 구성

 

검색엔진 자체 개발을 위한 기본 개념적 설명이며, 수집, 색인, 검색 부분에 대해 

다음편에서 조금 더 상세히 공유하도록 하겠습니다. 


Open Source 검색 엔진 개발에 대한 더 자세한 내용을 살펴보고 싶다면, 아래 링크를 클릭해주세요.

▶ OPEN Source를 이용한 검색엔진 개발(2)