ABOUT ME

양질의 개발자로 성장한다. 꾸준히 발전한다. 😀

Today
Yesterday
Total
  • Elasticsearch란?
    Search & AI/Elasticsearch 2025. 3. 25. 22:40
    반응형

    1. Elasticsearch란 무엇인가?

    Elasticsearch는 오픈소스 분산 검색 엔진으로, Apache Lucene을 기반으로 만들어졌습니다. 단순한 텍스트 검색을 넘어서, 대규모의 정형/비정형 데이터에 대한 검색 및 분석을 실시간으로 처리할 수 있습니다. 로그 분석, 모니터링, 데이터 탐색, 검색 서비스 등 다양한 분야에서 핵심 인프라로 사용됩니다.

    ✅ 핵심 키워드: Full-text search, 분산(Distributed), 실시간(Real-time), RESTful API

     

    2. 철학: 검색을 중심으로 한 데이터 저장

    Elasticsearch의 가장 큰 철학은 "검색이 핵심이다"라는 것입니다. 일반적인 RDBMS는 데이터를 정규화된 형태로 저장하고 나중에 조회하지만, Elasticsearch는 검색을 위한 데이터 구조로 저장하고 인덱싱하는 데 초점을 맞춥니다.

    이 철학은 Lucene 기반의 데이터 구조와도 연결됩니다. 데이터를 저장할 때부터 검색 최적화 구조로 인덱싱하여, "나중에 검색을 빠르게"가 아니라 "처음부터 검색을 위해 설계"된 시스템입니다.

     

    3. 핵심 메커니즘

    📦 3.1. Index / Document / Field

    • Index: RDBMS의 데이터베이스(DB)에 해당하는 논리적 단위
    • Document: JSON 형식으로 저장되는 실제 데이터 단위 (RDBMS의 row에 해당)
    • Field: Document 내부의 key-value 구조 (RDBMS의 column)

    Elasticsearch는 JSON 형태로 데이터를 저장하고, 각 field에 대해 자동 또는 수동으로 매핑(mapping) 규칙을 적용합니다.

     

    🧱 3.2. 분산 구조: Node, Cluster, Shard, Replica

    • Node: Elasticsearch가 설치된 하나의 서버 인스턴스
    • Cluster: 여러 Node가 모여 하나의 논리적인 검색 시스템을 형성
    • Shard: Index가 나뉘어진 물리적 단위 (병렬 처리와 확장성 확보)
    • Replica: Shard의 복제본 (가용성과 부하 분산 확보)

    기본적으로 하나의 Index는 여러 Shard로 분산 저장되고, 각 Shard는 여러 Node에 분산되어 저장됩니다.

     

    ⚙️ 3.3. 역색인(Inverted Index)

    Elasticsearch의 핵심 동작은 바로 역색인(Inverted Index) 구조입니다. 이는 전통적인 색인 방식과 반대이며, 다음과 같이 작동합니다:

     
    일반 색인: 문서 → 포함된 단어
    역색인: 단어 → 포함된 문서 목록

     

    이 구조 덕분에 특정 단어가 포함된 문서를 매우 빠르게 검색할 수 있으며, Full-text 검색 성능이 극대화됩니다.

     

    🔍 3.4. 분석기(Analyzer)

    Elasticsearch는 텍스트 데이터를 저장할 때 분석기(Analyzer)를 이용해 다음과 같은 처리를 수행합니다:

    1. Tokenizer: 문장을 토큰(단어) 단위로 나눔
    2. Filter: 소문자 변환, 불용어 제거, 형태소 분석 등

    예를 들어 "The Quick Brown Fox"라는 문장은 다음과 같이 분석될 수 있습니다:

    → ["the", "quick", "brown", "fox"] → ["quick", "brown", "fox"]

    사용자가 직접 분석기를 정의할 수도 있고, 내장된 언어별 분석기를 사용할 수도 있습니다.

     

    4. 사용하는 알고리즘 및 기술

    📐 4.1. TF-IDF (Term Frequency-Inverse Document Frequency)

    Elasticsearch는 문서의 **관련도(relevance)**를 계산할 때 전통적으로 TF-IDF를 사용합니다:

    • TF: 단어의 등장 빈도
    • IDF: 드물게 등장하는 단어일수록 가중치 부여

    → 특정 검색어가 드물게 등장하면서 해당 문서에 자주 나온다면, 해당 문서를 더 높은 점수로 평가합니다.

    ⚖️ 4.2. BM25

    최근에는 기본 알고리즘으로 BM25를 사용합니다. 이는 TF-IDF의 개선 버전으로, 문서 길이에 대한 보정, 과도한 TF 영향 제한 등 현실적인 조정을 포함합니다.

    🧠 4.3. Boolean Retrieval Model

    검색 질의(Query DSL)는 내부적으로 Boolean Retrieval Model을 기반으로 합니다:

    • must: 해당 조건을 반드시 만족하는 문서
    • should: 만족하면 점수 증가
    • must_not: 제외할 조건

    → 복합적인 검색 조건을 정교하게 구성할 수 있습니다.

    🔄 4.4. 정렬 및 점수 계산

    • Score는 BM25나 사용자 정의 스크립트 기반으로 계산됩니다.
    • 정렬은 _score, 시간, 알파벳, 사용자 필드 등으로 유연하게 설정 가능.

     

    5. 실시간(Real-time) 아님: Near Real-Time(NRT)

    많은 사람들이 Elasticsearch를 실시간 검색 엔진이라고 생각하지만, 정확히는 **Near Real-Time(NRT)**입니다.

    • 문서를 저장하고 바로 검색되는 것이 아니라, 내부적으로 refresh interval(기본 1초) 주기로 검색 가능 상태로 변환됩니다.
    • 이 Refresh 과정이 성능과 실시간성 사이의 밸런스를 조절합니다.

     

    6. 요약

    반응형

    'Search & AI > Elasticsearch' 카테고리의 다른 글

    Elasticsearch: BULK란?  (0) 2025.03.27
Designed by Tistory.