본문 바로가기

데이터처리/elasticSearch

elasticsearch 소개

엘라스틱 서치?

데이터 검색을 위해서는 검색 결과를 내놓고, 통계를 제공하고, 빠른 처리 속도가 필요한데,

이런 경우엔 엘라스틱서치 같은 검색엔진을 사용하는게 적합하다.

 

엘라스틱서치는 실시간 검색을 제공하고 집계 기능을 제공하고 시스템 확장에도 용이하다.

 

엘라스틱 서치는 Apache Lucene 을 기반으로 만들어졌는데 루씬에서 역색인을 제공해준다.

역색인은 각 단어가 어느 문서에 있는지 목록을 만들어 유지하는 자료구조인데 

이 역색인을 통해 데이터 검색을 빠르게 할 수 있다.

 

엘라스틱 서치는 데이터를 색인 하고 검색 하는 루씬의 기능들을 사용한다.

 

색인 - 어떻게 문서를 처리하고 저장할지

검색 - 여러 질의와 필터들 선택

 

엘라스틱서치는 REST API 로 기능을 제공하고 JSON 으로 질의한다.

루씬이 제공하는 것에 기반을둬서 캐시부터 실시간 분석까지 다양한 기능을 추가했다.

클러스터에서 동작을 한다.

 

 

엘라스틱 서치는 검색 엔진인데 루씬을 기반으로 데이터를 색인 시켜 저장 후 
여러 질의와 필터들로 검색을 할 수 있다.
클러스터에서 동작을 하고 REST API 형식으로 질의가 가능하다.

 

문서를 색인할 때는 분석(analysis) 를 통해 저장을 한다.

분석을 통해 엘라스틱 서치 내부에 terms 로 저장이 된다. 

데이터는 가장 작은 단위인 문서로 되어있고 엘라스틱서치는 문서를 저장하고 분석을 통해 만들어진 terms 들을 역색인에 넣어서 빠르게 검색이 가능하게 한다.

 

 

 

엘라스틱 서치 논리적/물리적 배치

 

논리배치 - 어플리케이션이 검색을 할때 무엇을 알아야 하는지

색인과 검색을 위해 사용하는 구성 단위는 문서다.

색인은 데이터베이스와 유사하다.

 

물리적배치 -  엘라스틱서치가 뒷단에서 어떻게 데이터를 다루는가

엘라스틱서치는 색인을 샤드로 나눈다

 

문서 (도큐먼트)

 

엘라스틱서치는 문서기반 이다. 데이터의 가장 작은 단위가 문서 라는것.

 

이 문서는 필드와 값을 가진다. 

엘라스틱서치는 모든 필드의 타입을 매핑으로 가지고 있다.

 

색인 (Index)

매핑 타입의 컨테이너. 독립적인 문서 덩어리다.

엘라스틱 서치는 여러대의 서버에서 실행이 되고 각 서버들에서 같은 색인의 샤드들을 가질 수 있다.

 

엘라스틱서치 확장

엘라스틱서치에서 데이터가 물리적으로 어떻게 배치가 될까?

클러스터에서 노드가 어떻게 동작하는지 확장은 어떻게 하는지, 데이터는 샤드와 복제로 어떻게 나누는지

색인과 검색이 여러 샤드, 복제와 어떻게 동작하는지 봐보자

 

기본값으로 인덱스는 5개의 주 샤드로 구성되고 하나씩 복제를 가지고 있어서 10개의 샤드를 가지게 된다.

 

 

데이터가 추가되면 어떤식으로 동작하나?

 

문서 id에 해시값에 기반을 둬서 주 샤드 중 하나에 보내서 저장되고 그 후 주 샤드의 모든 복제들에 색인하도록 데이터를 보낸다. 복제가 주샤드와 동기화가 유지되고 동기화된 복제들은 검색을 제공하고 주샤드가 이용불가해지면 

주 샤드로 승격하기도 한다.

 

검색할 때 어떤식으로 동작하는지?

 

검색을 할땐 해당 인덱스의 전체 샤드들을 찾는다 복제까지 포함해서,

엘라스틱서치는 검색 색인의 주 샤드, 레플리카 샤드 간에 검색 로드를 적절하게 분배해서

검색 성능을 높인다.

 

엘라스틱서치는 색인을 샤드라는 청크로 나누고
하나의 샤드는 하나의 루씬 색인이고 루씬 색인에는 역색인을 포함한 파일들의 모음이다.

 

매핑

매핑은 새 도큐먼트를 추가하면 자동으로 생성이 되는데 

_mapping 으로 확인해볼 수 있다