본문 바로가기

DevOps/Elastic Stack

검색 엔진 원리 / Elastic Search vs Solr Search :: DANIDANI

검색 엔진(search engine) 이란?

웹에 존재하는 많은 양의 정보 중에서 사용자가 원하는 정보만을 여러 웹 사이트나 웹 페이지 등에서 검색해 주는 시스템이나 프로그램 등을 통틀어 말한다.

검색 엔진 원리(로봇 검색 엔진)

1. Crwaling: 정보 찾기

크롤러(또는 스파이더)란 웹상의 문서나 이미지, 영상 등을 주기적으로 검색하고 취합하여, 자동으로 데이터베이스화시키는 프로그램으로 봇(Bot)이라고도 부릅니다.

google의 크롤러 이름은 Goolgebot, naver의 크롤러 이름은 Yeti

  • 크롤러가 웹사이트를 옮겨 다니면서 정보를 수집한다.

  • 새로운 웹페이지나 기존의 웹페이지지만 업데이트된 정보가 있으면 방문을 하게 된다.

  • 이때, 공개된 사이트의 정보만 수집하는데 이는 크롤러가 robots.txt파일을 통해 확인한다.

    robots.txt에서 "허용한다"라고 하면 정보를 가져오고,

    "허용하지 않는다"하면 정보를 가져오지 않는다.

    다음은 네이버 웹마스터도구에서 확인할 수 있는 robots.txt 내용이다.

2. Indexing: 컨텐츠 색인

  • 색인된 페이지는 거대한 데이터베이스에 저장하게 된다.
  • 인덱싱의 과정은 특정 키워드로 웹페이지를 할당하고 단어와 내용이 웹페이지를 위한 최선의 설명인지 확인하는 과정이다.

3. Process: 검색 처리

  • 검색을 시작하면 검색엔진이 검색어와 데이터베이스에 색인하여 저장된 웹페이지를 비교한다.
  • 그 수백만개의 웹페이지들 중에서 키워드 관련성을 체크하기 위해 계산을 한다.

4. Calculating Relevancy: 관련도 계산

  • 관련도 계산(Calculating Relevancy) 하기 위한 알고리즘은 굉장히 다양해서 각각의 알고리즘은 키워드, 링크, 메타태그 등 다른 관련성의 비중을 두어 체크하게 된다.
  • 이러한 이유로 같은 키워드로 구글, 야후 등 다른 검색엔진에서 검색 시 같지 않은 검색 결과를 보여주는 것이다.

5. Retrieving: 검색결과 가져오는 과정

  • 브러우저에서 검색 결과를 확인할 수 있도록 웹페이지들을 구분, 정리하여 볼 수 있다.

검색 엔진 개발을 위한 오픈 소스

검색 엔진 개발을 위한 오픈 소스 중에는 여러 개가 있지만 그중에 대표적인 Elastic Search와 Solr Search를 비교해보았다.

  Elastic Search Solr Search
데이터 사이즈 주로 사이즈가 작은 데이터 검색에 용이 주로 사이즈가 큰 데이터 검색에 용이
데이터 import JDBC, Git, MongoDB, Redis, RSS, SVN, Twitter 등 JDBC, XML, URL, FileSystem등
실시간 인덱싱 실시간 준실시간
스키마 변경 즉시 적용 재가동 후 적용
수정 수정 데이터만 재색인 전체 데이터 재색인
API 호출 타임 Json XML, CSV, Json
공식 지원 언어 Go, Haskell, Java, Javascript, PHP, Python 등 Java
인덱스간 조인 지원하지 않음 지원
검색속도 빠름 느림