ElasticSearch 개념잡기1

hanana·2026년 2월 18일
post-thumbnail

본 포스팅은 인프런 JSCODE 박재성님의 실전에서 바로 써먹는 Elasticsearch 입문 (검색 최적화편)
강의를 들은 후 해당 강의를 참고하여 작성되었습니다.
https://inf.run/767Nk


1. ElasticSearch 기본 개념

ElasticSearch란?

Elasticsearch is an open source, distributed search and analytics engine built for speed, scale, and AI applications. As a retrieval platform, it stores structured, unstructured, and vector data in real time — delivering fast hybrid and vector search, powering observability and security analytics, and enabling AI-driven applications with high performance, accuracy, and relevance.

-> Elasticsearch는 속도, 확장성 및 AI 애플리케이션을 위해 구축된 오픈 소스 분산형 검색 및 분석 엔진입니다... (이하 생략)

ElasticSearch 작동 방식


MYSQL과 소통하기 위해서는 SQL문을 작성하여 소통하는것 처럼
ElasticSearch와 소통하기 위해서는 ES QueryDSL을 생성해야 하는데,
소통의 방식으로 REST API를 사용한다.

데이터 삽입하기

MYSQL

INSERT INTO users (name,age) VALUES ("박하나", 22);

ElasticSearch

curl -X POST "http://localhost:9200/users/_doc" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "박하나",
    "age": 26
  }'

데이터 조회하기

MYSQL

SELECT * FROM users;

ElasticSearch

curl -X GET "http://localhost:9200/users/_search" \
  -H "Content-Type: application/json" \
  -d '{
    "query": {
    	"match_all": {}
    }
  }'

Kibana 사용하기

MYSQL에서 모든 쿼리를 일일히 콘솔로 입력하기는 힘들다.
그래서 DataGrip, workbench등을 사용하는데
마찬가지로 ElasticSearch에서도 Kibana를 이용하여 어떤 쿼리와 동작을 훨씬 쉽게 알 수 있다.

ElasticSearch의 기본 용어 정리

MYSQL

데이터를 저장/조회/수정/삭제 할 수 있다.
데이터를 저장하기 위해 가장 먼저 테이블(table)을 만든다.
테이블을 만들 때 어떤 유형의 데이터를 넣을 지 스키마(schema)를 정의한다.
테이블의 컬럼(column)에 맞게 데이터를 저장한다.

ElasticSearch

데이터를 저장/조회/수정/삭제 할 수있다.
데이터를 저장하기 위해 가장 먼저 인덱스(index)를 만든다
인덱스를 만들 때 어떤 유형의 데이터를 넣을지 매핑(mapping)을 정의한다
테이블의 필드(field)에 맞게 데이터를 저장한다.

MYSQLElasticSearch
테이블(table)인덱스(index)
컬럼(column)필드(field)
레코드(record), 로우(row)도큐먼트(document)
스키마(schema)매핑(mapping)

ElasticSearch 기본문법

인덱스 생성/조회/삭제하기

MySQL에서 테이블을 생성하는것과 같다.

# 인덱스 생성
# PUT /{인덱스명}
PUT /users

# 인덱스 조회
# GET /{인덱스명}
GET /users

# 인덱스 삭제
# DELETE /{인덱스명}
DELETE /users 

매핑 정의하기

MySQL에서 테이블의 스키마를 정의하는것과 같다

# 매핑 정의하기
# PUT /{인덱스명}/_mappings
PUT /users/_mappings
{
    "properties" : {
        "name" : {"type": "keyword"},
        "age" : {"type": "integer"},
        "is_active" : {"type": "boolean"}
    }
}

도큐먼트 삽입하기

MySQL에서 테이블에 record를 삽입하는 것과 같다

# 도큐먼트 삽입하기 - 1 (id 자동 생성)
# POST /{인덱스명}/_doc

POST /users/_doc
{
	"name": "박하나",
    "age": 26,
    "is_active": ture
}


# 도큐먼트 삽입하기 - 2 (id 직접 지정)
# POST /{인덱스명}/_create/{id}
POST /users/_create/1
{
	"name": "신세경",
    "age": 34,
    "is_active": true
}

# 도큐먼트 삽입하기 -3 (id 직접 지정 + id중복시 overwrite)
# PUT /{인덱스명}/_doc/{id}
PUT /users/_doc/1
{
	"name": "박하나",
    "age": 27,
    "is_active": ture
}

도큐먼트 수정하기

# 도큐먼트 수정하기 -1 (완전히 overwrite)
# PUT /{인덱스명}/_doc/{id}
PUT /users/_doc/1
{
	"name": "신세경",
}
# -> 기존 필드가 전부 다 날아가고 덮어쓰기 되니 사용에 주의

# 도큐먼트 수정하기 -2 (지정한 필드만 수정)
# POST /users/_update/{id}
POST /users/_update/1
{
	"name":"신세경"
}

도큐먼트 삭제하기

# id로 삭제하기
# DELETE /{인덱스명}/_doc/{id}
DELETE /users/_doc/1
profile
성숙해지려고 노력하지 않으면 성숙하기까지 매우 많은 시간이 걸린다.

0개의 댓글