검색에 최적화 되어있는 광범위한 개방형 검색 플래폼이며 다양한 프로그래밍 언어와 HTTP의 JSON 인터페이스를 지원해줍니다.
ElasticSearch는 검색 엔진이며 로그분석, 이벤트 분석, 성능 분석등 분석 및 인사이트를 제공해줍니다.
Elasticsearch는 트랜잭션 및 JOIN을 지원해주지 않습니다.
모든 동작을 REST API로 제공합니다.
Document
ElasicSearch | RDBMS |
---|---|
Index | Table |
Document | Row |
Field | Column |
Mapping | Schema |
분류 | 데이터 타입 | 설명 |
---|---|---|
Boolean | boolean | true / false |
이진값 | binary | Base64 string 같이 인코딩된 바이너리 데이터 |
실수형 | float, double | |
정수형 | integer, short, byte, long | |
객체 | object | JSON 객체 |
IP | ip | IP 주소의 값 |
텍스트 | text | 전문 검색용, 텍스트 분석기가 텍스트를 분리 |
keyword | 분석용으로 사용하지 않는다. 정렬, 집계에 사용 | |
날짜 | date | 날짜나 시간 값 |
범위 | integer_range, float_range, Long_range, date_range, ip_range | 최소값과 최대값으로 범위를 설정한 데이터 |
분석기는 캐릭터 필터, 토크나이너, 토큰 필터로 구성되어있습니다.
분석기는 역인덱싱 기술을 지원합니다.
역인덱싱이란 긴 텍스트를 특정 기준으로 나누어서 인덱싱하는 기술입니다.
분석기 구성 요소 | 설명 |
---|---|
Char Filter | 입력을 받은 원본 텍스트 문자열을 추가, 변경, 제거 |
Tokenizer | 문자열을 받아서 분리 기준에 따라 문자열을 토큰 분리 |
Token Filter | 토큰을 추가하거나 수정 또는 제거 |
이외에도 whitespace Token Filter와 Keyword Token Filter등등 다양한 내장 분석기가 존재합니다.
역인덱스는 단어가 포함된 문서의 목록입니다.
특정 단어가 포함된 문서를 빠르게 찾을 수 있습니다.
예시
서비스가 커지고 트래픽이 늘어나면 관계형 데이터베이스로는 한계가 있습니다.
Elasticsearch를 이용하면 텍스트 매칭, 텍스트 변형 검색, 랭킹 시스템, 유사어나 동의어 처리에 최적화 되어있습니다.
rest-api에서 제공해주는 쿼리 스트링 방법입니다.
간단한 쿼리에는 효율적이지만 쿼리가 길어지면 가독성이 안좋고 복잡해집니다.
쿼리 DSL은 Json 기반으로 쿼리를 작성하는 방법입니다.
복잡한 쿼리를 처리하기 좋은 방법입니다.
리프 쿼리는 특정 필드를 대상으로 쿼리하는 방법입니다.
리프 쿼리를 조합해서 쿼리하는 방식입니다.
특정한 필드를 기준으로 수치 계산이나 통계값을 구하는 기능입니다.
RDBMS에 집계함수와 같은 기능이며 avg, min, max, sum, percentiles, stats 등등
특정 기준에 따라 문서를 묶어주는 기능입니다.
RDBMS에 Group by, having과 같은 기능이며 histogram, range, date_range, terms, filters 등등
Elasticsearch 클라우드를 구성하는 하나의 인스턴스입니다.
노드는 최소한의 단위이며 여러기능을 하는 노드가 존재합니다.
각 노드들의 기능을 한 노드에게 몰아줄 수 있지만 성능 및 확장성, 복잡성을 생각하여 분리를 하는것을 권장합니다.
백업은 기본적으로 자주하는 것이 중요합니다.
Elasticsearch의 백업은 증분 백업이라 자주 백업이 가능합니다.
출처 : FastCampus