본문으로 건너뛰기
김신건의 로그

[Search] ElasticSearch: Lucene 위 분산 검색 엔진

· 수정 · 📖 약 2분 · 592자/단어 #elasticsearch #search #lucene #inverted-index #elk
ElasticSearch, Elastic, Elastic Stack, ELK, ES license, ES 8.x, ES 9.x

정의

ElasticSearch = Apache Lucene 위의 분산 RESTful 검색/분석 엔진. 2010 출시. Logstash + Kibana + Beats 와 함께 Elastic Stack (옛 ELK) 의 코어.

IMPORTANT

2026-06 시점 세계 가장 많이 쓰이는 검색 엔진. 전문 검색, 로그 분석, APM, SIEM, vector search, RAGde facto.

라이센스 분기 타임라인

시점이벤트
2010ES 출시. Apache 2.0
2021-01SSPL + ES License 로 전환 (AWS 와의 갈등)
2021-04AWS 가 OpenSearch fork (ES 7.10 기반, Apache 2.0)
2024-08Elastic 가 AGPLv3 추가 (blog). 8.16+ 부터 AGPL/SSPL/ES License 3-way 선택
2026ES 9.x stable 운영. OpenSearch 도 계속 활성

NOTE

Elastic 가 다시 OSI 호환 라이센스 (AGPL) 를 추가. OpenSearch 와의 경쟁 + 사용자 신뢰 회복 의 결합 결정. 단 managed cloud 운영 제약 은 SSPL 유지.

핵심 컴포넌트

flowchart LR
    Beats[Beats / Elastic Agent] -->|input| LS[Logstash<br/>또는 Ingest pipeline]
    LS --> ES[(Elasticsearch)]
    ES --> Kib["Kibana<br/>(시각화 + 관리)"]
    App[App] -->|REST + JSON| ES
    App -->|ESQL| ES
컴포넌트역할
Elasticsearch분산 인덱스 + 검색 + 분석
KibanaUI, dashboard, dev tools, alerting
Logstash데이터 수집 + 변환 (옛). 현재 Ingest pipeline 이 대안
Beats가벼운 shipper. Elastic Agent 로 통합 진행 중
FleetElastic Agent 의 중앙 관리

ES 의 본질

flowchart LR
    Doc[JSON Document] -->|index API| Analyze["Analyzer<br/>(tokenize, normalize)"]
    Analyze --> Inv["Inverted Index<br/>(term → docs)"]
    Inv --> Lucene[(Lucene segments)]
    Query[Query] -->|search API| Score[BM25 scoring]
    Score --> Sort[Sort by relevance]
    Sort --> Result[Top-K results]
  • JSON 문서 단위 저장.
  • 자동 inverted index 빌드.
  • near real-time (인덱싱 후 1초 내 검색 가능).
  • RESTful + JSON: HTTP 만 알면 사용.

자세한 원리는 elasticsearch-basics.

ES vs 다른 DB

ElasticSearchRDBMSMongoDBSolr
강점full-text search + analytics트랜잭션문서 + flexiblefull-text search
약점트랜잭션, write-heavyfull-text 약함검색 약함분산 운영 어려움
QueryDSL + ESQLSQLMQLDSL
Scalingshard + replicareplica + read splitshardshard
사용search, log, APMOLTP문서 + 모바일search (옛)

ES 8.x → 9.x 주요 변화

영역8.x9.x (2025+)
ESQL도입 (8.11)프로덕션 표준
Vectordense_vector + kNNquantization 자동, BBQ
ELSER영문 모델 (sparse)다국어 + v2
Inference API외부 LLM 통합endpoint 확장
Bytes/Cost기본Search AI Lake (storage 분리)
Snapshots지원searchable snapshots 강화

활용 카테고리

flowchart TB
    Use[ES 활용]
    Use --> Search[Site search, e-commerce, autocomplete]
    Use --> Log[Logs: Filebeat → ES → Kibana]
    Use --> APM[APM, OpenTelemetry 통합]
    Use --> SIEM["Security (SIEM), threat detection"]
    Use --> Metrics[Metrics, Observability]
    Use --> Vector[Vector search, RAG, semantic]
    Use --> Geo[Geo search, maps]

관련 위키 (이 클러스터)

운영자 시점의 세부 페이지:

인접 위키

이 글의 용어 (16개)
[DB] MongoDB: 문서 DB, WiredTiger, replica set, aggregationdatabase-internals
정의 MongoDB 는 BSON (binary JSON) 문서 기반 NoSQL DB. schema-less 라기보다 flexible schema. 2026 시점 Atlas (ma…
[Distributed] Kafka: 분산 로그, partition, consumer groupdistributed-systems
정의 Apache Kafka = 분산 commit log. 고처리량 (수백만 msg/s), 영속, 수평 확장. event-driven 아키텍처 의 de facto. 핵심 개념: …
[Observability] OpenTelemetry: 표준화된 trace/metric/logdevops
정의 OpenTelemetry (OTel) = observability 의 vendor-neutral 표준. CNCF. trace + metric + log 의 SDK + pro…
[Observability] Prometheus: pull 기반 메트릭, PromQLdevops
정의 Prometheus = pull 기반 시계열 metric 시스템. PromQL 로 쿼리. CNCF graduated. 2026 클라우드 네이티브 메트릭 표준. 아키텍처 Pu…
[Redis] Vector Search: HNSW, SVS-VAMANA, Semantic Cachedatabase-internals
정의 Vector Search 는 임베딩 벡터의 거리/유사도 기준으로 근접한 K 개 를 찾는 검색. Redis 는 RediSearch 모듈 (Redis 8 부터는 코어) 과 Va…
[Search] ElasticSearch 기본 원리: Inverted Index, Segment, Lucenesearch
정의 ES 의 모든 동작 은 Lucene 의 inverted index 위에 얹혀있다. 문서 단위 저장 + term 단위 검색 의 분리. Inverted Index (역색인) 위…
[Search] Elasticsearch vs OpenSearch: 라이센스 분기와 차이search
정의 OpenSearch = AWS 가 2021 년 Elasticsearch 7.10 에서 fork 한 Apache 2.0 라이센스 search engine. Kibana → O…
[Search] ES 인프라: cluster, shard, replica, ELKsearch
정의 ES 는 분산 시스템. cluster + multiple nodes + shards + replicas + Elastic Stack 보조 도구. Cluster 구조 Node…
[Search] ES 한글 인덱싱: nori, mecab, 형태소 분석search
정의 한국어 는 교착어 + 띄어쓰기 모호 + 형태소 변화 때문에 공백 단순 분리 로는 검색 불가. 형태소 분석 (morphological analysis) 필수. 한글이 어려운 …
[Search] ES Aggregations: metric, bucket, pipelinesearch
정의 Aggregations (aggs) = ES 의 집계 분석. SQL 의 GROUP BY + 함수 + window. 검색 결과 또는 전체 위에서. 3가지 카테고리 Metric…
[Search] ES Indexing: bulk, refresh, ingest pipelinesearch
정의 Indexing = JSON 문서를 역색인에 등록 하는 행위. Lucene segment 빌드 + refresh + flush 의 흐름. 단일 인덱싱 | 동작 | 결과 | …
[Search] ES Mapping: field type, dynamic, multi-fieldsearch
정의 Mapping = ES 의 schema. 각 필드의 type + analyzer + indexing 옵션. 대부분 immutable (재인덱싱 필요). Field Type …
[Search] ES Query: must / should / filter / must_notsearch
정의 ES 의 Query DSL = JSON 기반 표현력 풍부한 쿼리 언어. bool query + leaf query 의 조합. bool query: 4가지 절 | 절 | AN…
[Search] ES Relevance Scoring: BM25, TF-IDF, function_scoresearch
정의 Relevance Score ( ) = 쿼리와 문서의 매칭 강도. ES 7+ 의 기본은 BM25 (TF-IDF 의 발전형). BM25 공식 | 부분 | 의미 | |---|-…
[Search] ES Sort: relevance, field, script, geosearch
정의 ES 의 기본 정렬 = relevance score (BM25) 내림차순. 명시적 sort 로 변경 가능. docvalues 로 메모리 효율적 정렬. 5가지 정렬 1. Fi…
[Search] ES Vector Search: kNN, ELSER, RAGsearch
정의 ES 의 벡터 검색 = 임베딩 기반 의미 검색. kNN (Approximate Nearest Neighbor) 으로 수억 벡터 안에서 가까운 K개 찾기. 2026 시점의 E…

💬 댓글

사이트 검색 / 명령어

검색

스크롤 = 확대/축소 · 드래그 = 이동 · 0 = 원래 크기 · ESC = 닫기