본문 바로가기
Tools/ElasticSearch

[검색엔진] Elasticsearch

by mssong92 2022. 9. 23.

Elasticsearch란? 

Elasticsearch는 Apache Lucene(아파치 루씬) 기반의 오픈소스 분산 검색 엔진입니다.  

전문검색(Full Text Search) 기능과 점수 기반의 다양한 정확도 알고리즘, 실시간 분석 등의 구현이 가능합니다. 또한 다양한 플러그인들을 사용해 손쉽게 기능의 혹장이 가능하며 아마존서비스(AWS), 마이크로소프트 애저(MS Azure) 같은 클라우드 서비스 그리고 하둡(Hadoop) 플랫폼들과의 연동도 가능 

Elasticsearch 인덱스

Elasticsearch 인덱스는 서로 관련되어 있는 문서들의 모음입니다. Elasticsearch는 JSON 문서로 데이터를 저장합니다. 각 문서는 일련의 (필드나 속성의 이름)와 그에 해당하는 값(문자열, 숫자, 부울, 날짜, 의 배열, 지리적 위치 또는 기타 데이터 유형)을 서로 연결합니다. 

Elasticsearch는반전된 인덱스라고 하는 데이터 구조를 사용하는데, 이것은 아주 빠른 전체 텍스트 검색을 할 수 있도록 설계된 것입니다. 반전된 인덱스는 문서에 나타나는 모든 고유한 단어의 목록을 만들고, 각 단어가 발생하는 모든 문서를 식별합니다. 

색인 프로세스 중에, Elasticsearch는 문서를 저장하고 반전된 인덱스를 구축하여 거의 실시간으로 문서를 검색 가능한 데이터로 만듭니다. 인덱스 API를 사용해 색인이 시작되며, 이를 통해 사용자는 특정한 인덱스에서 JSON 문서를 추가하거나 업데이트할 수 있습니다. 

Elasticsearch와 관계형 DB 비교아키텍쳐 

 

표 1
그림 1

Elasticsearch에서index는 RDBMS에서 database와 대응하는 개념입니다.

또한 shard와 replica는 Elasticsearch에만 존재하는 개념이 아니라, 분산 데이터베이스 시스템에도 존재하는 개념입니다.

 

샤딩( sharding )은 데이터를 분산해서 저장하는 방법을 의미합니다. 

즉, Elasticsearch에서 스케일 아웃을 위해 index를 여러 shard로 쪼갠 것입니다. 

기본적으로 1개가 존재하며, 검색 성능 향상을 위해 클러스터의 샤드 갯수를 조정하는 튜닝을 하기도 합니다. 

 

replica는 또 다른 형태의 shard라고 할 수 있습니다. 

노드를 손실했을 경우 데이터의 신뢰성을 위해 샤드들을 복제하는 것이죠. 

따라서 replica는 서로 다른 노드에 존재할 것을 권장합니다. 

아래 사진에서 보는 바와 같이 Replica1은 Node2에 존재하는 것을 확인할 수 있습니다. 

 

Elasticsearch 특징

  • Scale out : 샤드를 통해 규모가 수평적으로 늘어날 수 있음 
 
  • 고가용성 : Replica를 통해 데이터의 안정성을 보장 
 
  • Schema Free : Json 문서를 통해 데이터 검색을 수행하므로 스키마 개념이 없음 
 
  • Restful : 데이터 CURD 작업은 HTTP Restful API를 통해 수행하며, 각각 다음과 같이 대응합니다. 

 

 

표 2

inverted index (역색인) 

Elasticsearch는빠를까요? 그 이유는 inverted index(역색인)에 있습니다. 

 

먼저 index와 inverted index의 차이에 대해 알아보겠습니다. 

쉽게 말해서 책에서 맨 앞에 볼 수 있는 목차가 index이고, 

책 맨 뒤에 키워드마다 찾아볼 수 있도록 찾아보기가 inverted index입니다. 

[ Index( 색인 ) - 목차 ]                             [ Reverted Index( 역색인 ) - 찾아보기 ]

 

   

 

Elasticsearch는 텍스트를 파싱해서 검색어 사전을 만든 다음에 inverted index 방식으로 텍스트를 저장합니다. 

 

"Lorem Ipsum is simply dummy text of the printing and typesetting industry" 

예를 들어, 이 문장을 모두 파싱해서 각 단어들( Lorem, Ipsum, is, simply .... )을 저장하고, 대문자는 소문자 처리하고, 유사어도 체크하는 등의 작업을 통해 텍스트를 저장합니다. 

때문에 RDBMS보다 전문검색( Full Text Search )에 빠른 성능을 보입니다. 

 

댓글