본문 바로가기
카테고리 없음

[Elasticsearch] 기본 용어 및 기본 문법 정리

by 개미가되고싶은사람 2025. 6. 18.

Elasticsearch은 cURL을 이용한 직접적인 REST API 호출과 Kibana의 웹 기반 콘솔을 활용하는 방식이 있습니다. 이 두 방법은 문법이 조금 다르지만, 대부분의 사용자는 Kibana를 선호하기 때문에 이후 포스팅에서는 Kibana를 활용한 예시를 중심으로 설명하고자 합니다.

 

 

기본 용어

비교 항목 RDBS Elasticsearch
데이터 저장 단위 테이블 인덱스
데이터 속성 단위 칼럼 필드
데이터 단위 레코드, 로우 도큐먼트
데이터 구조 정의 스키마 매핑

위에 표를 보면 알 수 있듯이 RDBS에서 인덱스랑 Elasticsearch에서 인덱스는 다른 개념입니다.

 

 

외부 클라이언트 문법(cURL, Postman)

 

Kibana에서 Elasticsearch 문법

Elasticsearch와 상호작용하기 위해 cURL이나 Postman과 같은 외부 클라이언트를 사용할 때는 요청을 보낼 서버 주소와 포트를 명시해야 하지만, Kibana의 Dev Tools 콘솔에서는 이미 연결된 클러스터를 대상으로 하므로 이 server:port 부분을 생략할 수 있습니다.

  • GET / : Elasticsearch 서버 정보 확인
  • PUT /index_name : 인덱스 생성 
  • POST /index_name/_doc : 데이터(도큐먼트) 생성
  • GET /index_name/_doc/id : 데이터 조회
  • PUT /index_name/_doc/id : 데이터 업데이트
  • DELETE /index_name/_doc/id : 데이터 삭제
  • POST /index_name/_search : 데이터 검색 
  • PUT/index_name/_mappings : 매핑

 

사용 예시

# 띄어쓰기 및 줄 중요합니다!!

PUT /book  # 인덱스 생성

PUT /book/_mapping # 매핑
{
    "properties" :{
        "title" : { "type": "keyword"},
        "author" : { "type": "keyword"},
        "best_seller" : { "type": "integer"},
        "is_match" : { "type": "boolean"}
    }
}
 
# 도큐먼트 생성
# id를 지정하지 않으면 랜덤 id 발생
# 해당 ID로 도큐먼트가 없으면 생성하고, 있으면 업데이트
POST /book/_doc/1
{

    "title": "Effective Java",
    "author": "Joshua Bloch",
    "price": 23,
    "best_seller": true
}
 
# 도큐먼트 생성
# id 지정하지 않으면 오류 발생
# 해당 ID로 도큐먼트가 없으면 생성하고, 있으면 오류
POST /book/_create/1
{
    "title": "Effective Java",
    "author": "Joshua Bloch",
    "price": 23,
    "best_seller": true
}
 

# 도큐먼트 수정
# 해당 ID로 도큐먼트가 없으면 생성, 있으면 수정
# JSON 내용 그대로 생성 및 수정
PUT /book/_doc/1
{
    "title" : "update"
}

# ID를 통해 특정 필드만 수정
POST /book/_update/1
{
    "doc": {
        "title" : "특정 필드만 수정"
    }
}

# 도규먼트 삭제
DELETE /book/_doc/1

#집계
GET /book/_count

# 지정 ID로 여러 도큐먼트 조회 
# _source옵션으로 필드를 조회하지 않을 수 있습니다.
POST /book/_search
{
	"_source": true, 
    "query": {
        "ids": {
            "values": [1,2]
        }
    }
}

Elasticsearch 쿼리에서 중요한 점은 HTTP_METHOD를 상황에 맞춰서 사용해야 합니다.