반응형
인덱스와 도큐먼트가 무엇인지 알아보기 전에, 엘라스틱 서치 API 관련해서 알아보자.
엘라스틱서치 요청과 응답
엘라스틱 서치는 모든 요청과 응답을 REST API 형태로 제공한다. REST API를 활용하여 엘라스틱에 데이터를 적재하거나 조회할 수 있다.
2021.12.30 - [프로그래밍 노트/인프라] - [엘라스틱 스택] 맥북 실습 환경 구성
이전에 설치한 엘라스틱서치 서버에 curl로 API 요청을 해도 되고, 키바나에서 제공해주는 Dev Tools를 이용해서 손쉽게 API를 호출할 수 있다. (Management > Dev Tools)
// es_index 라는 인덱스를 생성하고, 1번 도큐먼트를 생성한다.
POST es_index/_doc/1
{"name":"corn", "age": 30}
// es_index 조회
GET es_index
// es_index 내부의 1번 도큐먼트만 조회
GET es_index/_doc/1
// es_index 삭제
DELETE es_index
인덱스와 도큐먼트
엘라스틱서치를 이해하기 위해서는 인덱스(index)와 도큐먼트(document)는 필수로 알아야하는데, 생각보다 개념이 어렵지는 않다.
- 인덱스 - 도큐먼트를 저장하는 논리적 구분자
- 도큐먼트 - 실제 데이터를 저장하는 단위
- 하나의 클러스터에 데이터 성격에 따라 여러 개의 인덱스가 존재한다.
- 인덱스 내부는 JSON 형태로 된 다수의 도큐먼트가 존재한다.
- 도큐먼트는 복수의 필드를 갖는다.
엘라스틱 서치에 저장되는 JSON데이터를 도큐먼트, 이 도큐먼트들을 저장하는 구분자(성격에 맞게)가 인덱스이다.
도큐먼트
- 데이터가 저장되는 기본 단위로 JSON형태이다.
- 여러 필드(field)와 값(value)를 갖음
// JSON 형식의 도큐먼트
{
"name": "corn", // 필드
"age": 30, // 필드
"gender": "male" // 필드
}
엘라스틱서치의 도큐먼트, 인덱스는 RDB와 많이 비교가되는데 위의 JSON 데이터가 member라는 인덱스에 저장된 도큐먼트라고 생각하고 비교해보자
엘라스틱 서치
- index : member
- document : {"name": "corn", "age": 30, "gender": "male"}
RDB
- 테이블 : member(name, age, gener 컬럼을 가짐)
- 레코드 데이터 : "corn", 30, "male"
index는 RDB의 테이블, document는 레코드 데이터와 성격이 비슷하다.
RDB | 엘라스틱서치 |
---|---|
테이블 | 인덱스 |
레코드 | 도큐먼트 |
컬럼 | 필드 |
스키마 | 매핑 |
인덱스
- 도큐먼트를 저장하는 논리적 단위(RDB의 테이블과 유사한 개념이다.)
도큐먼트 CRUD
REST API..!
인덱스 생성
PUT index1
or
POST index1
도큐먼트 생성
- 도큐먼트를 인덱스에 포함시키는 것을 인덱싱(indexing)이라고 부른다.
PUT index1/_doc/1
{
"name":"corn",
"age":30
}
도큐먼트 읽기
GET index1/_doc/1
// search라는 DSL 쿼리를 이용해 도큐먼트를 읽어올 수 있다.
GET index1/_search
도큐먼트 수정
PUT index1/_doc/1
{
"name": "hello"
}
// update API를 사용하여 업데이트할 수 있다.
POST index1/_update/1
{
"doc": {
"name": "hello"
}
}
도큐먼트 삭제
DELETE index1/_doc/1
도큐먼트 생성에서 보면, 우리는 필드 값의 타입을 지정한적이 없다. 엘라스틱서치는 도큐먼트의 필드 값을 보고 타입을 자동으로 지정하는데, 이 기능을 다이내믹 매핑(dynamic mapping)이라고 한다. 매핑은 다음 포스팅에서 알아보자.
참고) 엘라스틱 스택 개발부터 운영까지
반응형
'프로그래밍 노트 > 인프라' 카테고리의 다른 글
[Logstash] 로그스태시란? 로그스태시 활용기 (0) | 2022.08.16 |
---|---|
[엘라스틱 서치] 매핑과 인덱스 템플릿 (0) | 2022.01.03 |
[엘라스틱 스택] 맥북 실습 환경 구성 (0) | 2021.12.30 |
[엘라스틱 스택] 엘라스틱 스택 찍먹하기 (0) | 2021.12.23 |
[kafka] 카프카 프로듀서 주요 옵션 및 전송방법 (0) | 2021.08.09 |