본문 바로가기
엘라스틱서치

레퍼런스] 엘라스틱서치란 무엇인가?

by N.Damgom 2021. 9. 15.

엘라스틱서치란 무엇인가?

엘라스틱 서치란 무엇인가?

엘라스틱서치는 분산 시스템으로 구현된 검색 및 분석 엔진이며, 엘라스틱 스택에서의 가장 중요한 부분이다. 로그스태시 및 비츠는 데이터를 수집하고, 집계하며 데이터를 가공하고 저장하는데 도움을 준다. 키바나를 사용하여 데이터를 탐색하고 시각화하고 관리 및 모니터할 수 있다. 이처럼 엘라스틱서치는 데이터를 저장하고 검색하고 분석할 수 있는 정말 좋은 툴이다.
엘라스틱서치를 사용하여 모든 종류의 데이터를 실시간에 근접하게 검색하고 분석할 수 있다. 엘라스틱 서치는 구조화된 데이터든, 그냥 평문이든, 혹은 숫자나 지리 데이터라도 효율적으로 빠른 저장과 검색 기능을 지원한다. 데이터의 트렌드와 패턴을 알기 위해 단순한 검색과 집계 보다 훨씬 많은 것을 할 수 있으며 데이터가 커지고 쿼리가 복잡해지더라도 분산 시스템이라는 엘라스틱서치의 특성 상 너끈히 해낼 수 있다.
데이터를 다루는 모든 문제가 단순한 검색과 관련된 문제는 아니다. 엘라스틱 서치는 다양한 사용 예시에 대해 속도와 유연성을 제공한다. 사용 예시는 다음과 같다.

  • 앱이나 웹사이트에 검색창 달기
  • 로그, 지표, 보안 관련 데이터를 저장하고 분석하기
  • 실시간 데이터에 맞춰서 머신러닝 모델을 학습시키기
  • 엘라스틱서치를 스토리지로 사용해서 비지니스 자동화 시키기
  • GIS와 같은 공간 데이터를 관리하고 분석하고 통합하기
  • 유전 정보와 같은 바이오 데이터를 저장하고 처리하기

엘라스틱서치는 다양한 분야에서 창의적으로 사용될 수 있다. 그러나 어떠한 목적으로 사용하든, 엘라스틱 서치를 사용하는 방법은 동일하다.

엘라스틱서치 내부 구조: 도큐먼트와 인덱스

엘라스틱서치는 분산 도큐먼트 저장소이다. 데이터를 행과 열 형태인 테이블로 저장하는 대신에, 엘라스틱 서치는 복잡한 자료구조를 JSON 문자열 형태로 직렬화해서 저장한다. 만약 엘라스틱 서치가 여러 개의 노드로 구성된다면, 엘라스틱서치 내부에 저장된 도큐먼트들은 여러 개의 노드들로 이루어진 클러스터 내부에서 분산되어 저장되며, 어떤 노드에서 접근하더라도 다른 노드에 저장된 데이터를 빠르게 불러올 수 있다.
엘라스틱서치에 데이터를 저장할 때, 데이터는 실시간에 가깝게 (1초 이내) 저장되고, 검색될 수 있다. 엘라스틱서치는 Inverted Index(역색인) 자료구조를 사용하기 때문에 빠르게 데이터에 full-text(전문) 검색을 지원한다. 역색인 자료구조란 엘라스틱서치 내에 저장된 모든 도큐먼트에 포함되어 있는 단어들을 key의 형태로, 해당 단어가 들어있는 도큐먼트의 id들을 value 형태로 저장하고 있는 multi value map 자료구조이다.
인덱스는 도큐먼트들을 저장하는 최적화된 컬렉션으로, 각 도큐먼트는 key-value 형태의 자료구조인 필드를 담고 있는 컬렉션으로 생각될 수 있다. 기본적으로 엘라스틱 서치는 모든 필드의 모든 데이터를 인덱싱하며, 인덱싱된 필드는 각 필드에 맞게 특화되고, 최적화된 자료구조를 가지고 있다. 예를 들어 텍스트 필드는 역색인 구조로 저장되며, 숫자와 지리 필드는 BKD 트리 형태로 저장된다. 엘라스틱서치는 검색을 위해 필드에 맞는 자료구조를 사용함으로써 빠른 성능을 낼 수 있다.
또한 엘라스틱서치는 Schema-less 특징을 가진다. Schema-less란 여러 필드로 이루어진 데이터를 어떤 자료구조로 다뤄야 할 지 명시적으로 지정하지 않아도 데이터가 저장될 수 있는 구조이다. 다이나믹 매핑 기능이 활성화되었을 때, 엘라스틱서치는 자동적으로 데이터 타입을 추론하고 인덱스에 새로운 필드를 추가한다. 다이나믹 매핑을 활용하여 복잡한 설정 없이 데이터를 저장하고 검색하고 분석할 수 있다.
하지만 자동으로 데이터 타입을 추론할 수 있더라도, 그 기능이 완벽할 수는 없다. 데이터를 목적에 맞게 저장하고 분석하기 위해서는 다이나믹 매핑을 기준을 설정하고, 명시적으로 데이터가 어떻게 저장될 지 지정해야한다.
데이터 매핑을 지정함으로써 다음과 같은 일을 할 수 있다.

  • Full-text 검색에 사용될 문자열 필드와, 정확히 일치하는 문자열을 찾는 검색에 사용될 필드를 구분할 수 있다.
  • 각 언어에 특화된 텍스트 분석을 할 수 있다.
  • 부분 매칭에 사용될 필드를 최적화할 수 있다.
  • 커스텀 데이터 포맷을 사용할 수 있다.
  • 자동으로 매핑될 수 없는 지리 데이터를 사용할 수 있다.

같은 필드를 다른 목적으로 다르게 사용하는 것은 유용하다. 예를 들어, 특정 문자열 필드를 Full-text 검색과 집계와 정렬을 위한 키워드 검색에 동시에 사용할 수 있으며 다국어 분석도 할 수 있다.
데이터를 분석하여 검색에 알맞게 저장하는 analysis 는 데이터를 저장할 때뿐만 아니라 검색할 때도 사용된다. Full-text 검색 시에 검색어(query)는 인덱스에 저장되어 검색되기 전 같은 analysis를 거친다.
출처
https://www.elastic.co/guide/en/elasticsearch/reference/current/elasticsearch-intro.html

'엘라스틱서치' 카테고리의 다른 글

엘라스틱서치와 추천 - More Like This 쿼리  (0) 2021.09.20
7. 인덱스 설정과 매핑  (0) 2021.09.06
6. 데이터 색인과 텍스트 분석  (0) 2021.09.06
5. 검색과 쿼리  (0) 2021.09.05
4. 데이터 처리  (0) 2021.08.31