Elasticsearch는 Apache Lucene(아파치 루씬) 기반의 Java 오픈소스 분산 검색 엔진입니다.
Apache Lucene은 검색 라이브러리인데 이를 단독으로 사용할 수 있게 되었으며, 방대한 양의 데이터를 신속하게, 거의 실시간으로 저장, 검색, 분석할 수 있습니다.
Elastic Searchsms 검색을 위해 단독으로 사용되기도 하며, ELK(Elasticsearch
+ Logstatsh
+ Kibana
) 또는 EFK(Elasticsearch
+ Fluentd
+ Kibana
) 스택으로 사용되기도 합니다.
클러스터란 Elasticsearch에서 가장 큰 시스템 단위를 말하며, 최소 하나 이상의 노드들로 이루어진 집합입니다.
서로 다른 클러스터는 데이터의 접근, 교환을 할 수 없는 독립적인 시스템으로 유지되며,
여러 대의 서버가 하나의 클러스터를 구성할 수도 있고, 한 서버에 여러 개의 클러스타가 존재할 수도 있습니다.
Elasticsearch를 구성하는 하나의 단위 프로세스를 의미합니다.
그 역할에 따라 Master-eligible
, Data
, Injest
, Tribe
노드로 구분할 수 있습니다.
샤딩(Sharding)은 데이터를 분산해서 저장하는 방법을 의미합니다.
Elasticsearch의 스케일 아웃을 위해 index를 여러 shard로 쪼갠 것입니다.
기본적으로 1개가 존재하며, 검색 성능 향상을 위해 클러스터의 샤드 갯수를 조정하는 튜닝을 하기도 합니다.
replica는 또 다른 형태의 shard라고 할 수 있습니다.
노드를 손실했을 경우 데이터의 신뢰성을 위해 shard를 복제하는 것입니다.
JSON 오브젝트
하나.Document
는 다양한 필드로 구성되어 있으며, 이 필드에는 데이터 필드에 해당하는 데이터 타입이 들어갑니다. 중첩구조를 지원하기 때문에 Document 내부에 Document가 들어가는 것이 가능합니다.Index
가 RDBMS의 Table
과 Database
의 역할을 모두 한다고 생각하면 되겠습니다.필드
는 Document에 들어가는 데이터 타입으로 RDBMS의 열(column)과 비슷합니다. 하지만 Elasticsearch의 필드는 RDBMS보다 동적입니다. RDBMS에서는 하나의 열이 하나의 데이터 타입만 가질 수 있었지만, Elasticsearch에서는 하나의 필드가 여러개의 데이터 타입을 가질 수 있습니다.매핑
은 필드와 필드의 속성을 정의하고 색인 방법을 정의합니다. 매핑 정보에 여러가지 데이터 타입 지정이 가능하지만 필드명 자체는 중복이 불가능합니다.Database
+ Table
의 역할을 합니다.클러스터
로 구성했을 경우 Index는 여러 노드에 분산 저장/관리됩니다. 기본 설정은 5개의 프라이머리 샤드
와 1개의 레플리카 샤드
를 생성합니다.Elasticsearch가 빠르게 검색을 실행할 수 있는 이유는 inverted index에 있습니다.
Elasticsearch는 텍스트를 파싱해서 검색어 사전을 만든 다음에 inverted index 방식으로 텍스트를 저장합니다.
예를 들어,
Elasticsearch is based on Apache Lucene Library
위의 문장을 모두 파싱해서 Elasticsearch
,is
,based
,on
,Apache
,Lucene
,Library
처럼 저장 후 대문자를 소문자로 처리하고, 유사어 체크와 같은 작업을 진행하여 텍스트를 저장합니다.