Skip to content
Go back

ElasticSearch 설명

Updated:
Edit page

Table of contents

Open Table of contents

ElasticSearch 란?

ElasticSearch는 Apache Lucene 기반의 오픈소스, 분산, RESTful 검색 엔진입니다.
대량의 데이터를 신속하고 거의 실시간에 가까운 속도로 저장, 검새그 분석할 수 있도록 설계되었습니다.
ElasticSearch는 주로 로그나 트랜잭션 데이터와 같은 대규모 데이터셋을 분석하고 검색하는데 사용됩니다.

주요 특징

활용 분야

사용 이유

단점 및 고려사항

클러스터 구조에 대한 개인적인 생각

일단 Cluster는 물리적인 개념이 아닙니다.
여러 Node들이 서로 연결되고 하나로서 이루어져 통신하고 논리적으로 묶여있는 그런 시스템을 Cluster 라고 명명한 것입니다.
1차 조사로 Cluster 안에 여러 Elasticsearch 기법이 적용된 Node들이 하나의 검색엔진으로서 기능하는것이다 라고 이해를 했었는데 그것이 아니었습니다.
Node들은 그저 분할된 정보들을 나눠서 저장하는 역할인데 서버에 Elasticsearch 프로세스를 띄우거나 Docker로 각각의 Node마다 하나의 Container로서 띄운다하여 각각의 Node가 서로 다른 엔진으로서 기능하는줄 이해했던 것이었습니다.

사용 예시(CRUD)

문서입력

POST /products/_doc
{
"name": "Logitech Mouse",
"price": 29900,
"category": "electronics"
}
- 자동으로 ID가 생성됨

- _doc은 문서 타입 (현재는 거의 고정 사용)
PUT /products/_doc/1234
{
"name": "Apple Magic Keyboard",
"price": 129000
}
- 1234라는 ID로 저장됨

- 같은 ID로 다시 넣으면 업데이트(덮어쓰기)

단일 문서 조회

GET /products/_doc/1234
- 특정 ID의 문서를 가져옴

- 조건 검색 (Query DSL)
GET /products/_search
{
  "query": {
    "match": {
      "name": "keyboard"
    }
  }
}
- "keyboard"라는 단어가 포함된 문서 검색 (전문 검색)

- 필터 검색 (정확히 일치)
GET /products/_search
{
  "query": {
    "term": {
      "category.keyword": "electronics"
    }
  }
}
- 정렬/집계에 많이 쓰는 .keyword 필드를 활용한 정확한 매칭

문서 수정 (Update)

POST /products/_update/1234
{
  "doc": {
    "price": 119000
  }
}
- 문서의 price만 부분 업데이트

- 전체가 아니라 특정 필드만 수정할 때 유용

문서 삭제 (Delete)

DELETE /products/_doc/1234
- 해당 ID의 문서를 삭제함

Bulk 처리 (대량 작업)

대용량 데이터 입력이나 수정 시 많이 씀

POST /_bulk
{ "index": { "_index": "products", "_id": "1" } }
{ "name": "item1", "price": 10000 }
{ "index": { "_index": "products", "_id": "2" } }
{ "name": "item2", "price": 20000 }
- 한 번에 여러 문서를 처리함

- 성능 매우 중요할 때 필수 사용

집계(Aggregation) - 데이터 분석

평균 가격 구하기

GET /products/_search
{
  "size": 0,
  "aggs": {
    "avg_price": {
      "avg": {
        "field": "price"
      }
    }
  }
}
- 검색 결과는 버리고(size: 0), 가격 필드의 평균값만 계산

- 범주별 집계 (Group By와 유사)
GET /products/_search
{
  "size": 0,
  "aggs": {
    "by_category": {
      "terms": {
        "field": "category.keyword"
      }
    }
  }
}
- category 별 문서 수를 계산 (SQL의 GROUP BY 역할)

사용 예시(docker-compose)

services:
  elastic:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.17.4
    ports:
    environment:

Edit page
Share this post on:

Previous Post
아마존 vpn 터널링
Next Post
ElasticSearch 분산처리