elastic search는 json형식의 비정형 데이터를 분산저장하며 분석과 풀텍스트 검색을 제공하는 Javar기반 오픈소스 검색엔진입니다. 전통적인 RDBS나 noSQLDB들보다 훨씬 빠르게 복잡한 검색을 실행하며 엔진을 클러스터로 구성할 수 있어 scalable한 특징을 갖고있습니다. 루씬에서부터 시작해 현재 가장 기본적으로 쓰이는 검색엔진으로 빅테크기업부터 작은 회사까지 검색엔진으로 쓰이는 엘라스틱서치의 기본 개념에 대해 소개하겠습니다.
RDB와 ES 컨셉 매칭 (단, 컨셉일뿐 동일한 개념은 아님!)
RDB | ElasticSearch |
---|---|
Database | Index |
Row | Document |
Column | Field |
Schema | Mapping |
SQL | Query DSL |
데이터 최소 단위 (one of json object)
document는 key, value 쌍(field)으로 구성된 json object로 es 기본 저장 단위로,
사용자가 지정한 필드 외에도 기본 메타필드(_id, _type, _index)들이 포함됩니다.
Document를 구성하는 key,value 쌍으로 field는 고유의 데이터구조와 값을 갖습니다. 기본적인 데이터구조부터 object까지 다양한 구조가 elastic search의 장점중 하나라 아래 공식도큐먼트를 참고하시길 바랍니다.
- field data type 종류: Field data types | Elasticsearch Guide [7.16] | Elastic
여러개의 Document를 묶는 단위로 1개이상의 primary shard에 매핑되고, 0개 이상의 replica shard를 가지는 논리공간의 이름을 말합니다. 특정데이터에 대한 가격 정보(document)를 저장하는 index, 상품(document)를 저장하는 index 등 다양하게 저장됩니다.
RDBS는 다른 DB 정보를 엮어 조회가 불가능하지만 elastic search는 쿼리하나로 여러 index에서 정보를 가져올 수 있습니다.
ES에서 restful API를 통해 index에 document를 추가하는 과정을 색인화 과정이라하는데 이를 위해선 index와 그의 type과 정보의 고유 id를 지정합니다.
Index 안에서 하나 이상의 type을 정의할 수 있습니다. 색인을 논리적으로 분류/구분한 것으로 index내에 같은 document 종류를 그룹화하고 구성하며 일반적으로 여러 공통된 필드를 갖는 문서에 대해 유형의 정의됩니다. (하지만...7.0이상부터 type은 1개로 고정되어 ES에서 없애고있습니다)
document를 인덱싱할 때 인덱스에서 정의하는 필드에 맞춰 데이터가 맵핑됩니다.
사용자가 직접 인덱스 맵핑 필드를 정의할 수 있지만 es는 미리 인데그 매핑을 지정하지 않아도 자동으로 맵핑하는 dynamic mapping 기능이있어 매우 편리합니다.