개발 공부용

Elasticsearch 본문

카테고리 없음

Elasticsearch

솝제로 2025. 4. 8. 17:51

 

Elasticsearch의 특징

 

Elastic Search는 검색을 위한 DB

  • 역색인 방식을 사용하여 단어나 문장을 매우 빠르게 찾음
  • 자연어 처리 기능이 내장(NIP)
  • 단어를 쪼개는 토큰화 지원
  • 불필요한 단어를 거르는 필터링 지원
  • 비슷한 형태로 바꿔주는 정규화가 자동 지원
  • 조건 검색, 정렬 지원

=> 대량의 리뷰도 빠르게 검색 가능하다.

 

 

Elasticsearch의 기능

 

  • 스키마리스: 데이터 구조를 정하지 않고 유연하게 데이터를 추가할 수 있음 -> 성능을 위해서 권장되진 않음
  • 분산시스템(클러스터링): 데이터를 여러 노드에 나누어 저장(샤딩)하여 대량 대이터를 분산 처리함 -> 노드가 늘어날수록 검색 성능이 향상됨
  • 높은 확장성 및 고가용성: 클러스터 노드를 쉽게 추가하거나 제거할 수 있고 장애가 발생해도 서비스가 중단되지 않도록 설계됨
  • 실시간 데이터 처리 및 분석: 데이터가 추가되자마자 빠르게 인덱싱되어 거의 실시간으로 검색 가능함
  • RESTful API 지원: HTTP를 통한 RESTful 방식으로 접근하여 JSON 형태로 데이터를 처리함
  • 유연한 질의(Query DSL): JSON 기반의 강력하고 세밀한 검색 조건 설정이 가능함
  • 다양한 분석 및 집계 가능: 검색 결과 기반의 통계, 집계, 분석 가능
  • 자동 인덱스 관리: 오래된 인덱스 자동 삭제, 백업, 압축 등 자동으로 인덱스를 관리할 수 있는 기능을 제공함

 

Elasticsearch의 역색인 구조

 

정방향 색인은 문서에서 문서에 들어있는 단어 목록을 만드는 것.

Elasticsearch의 역색인에서는 단어를 기준으로 해당 단어가 포함된 문서 목록을 생성함.

Analyzer라는 기능으로 텍스트를 토큰화하여 저장한다.

따라서 데이터 검색 시 미리 저장된 역색인만 조회하면 되므로 검색이 빠르다.

 

텍스트를 토큰화

 

 

Elasticsearch 주요 구성 요소

 

  • Index: Elasticsearch에서 데이터의 논리적 저장 공간(RDBMS의 테이블)
    • 고유한 이름으로 식별됨
    • 하나의 클러스터 내에서 여러 인덱스를 생성할 수 있음
    • 인덱스는 하나 이상의 shard로 구성됨
POST /products #products라는 인덱스 생성
  • Shard: Elasticsearch의 인덱스를 나누는 물리적인 단위.
    • 하나의 인덱스가 너무 커지면 샤드로 쪼개서 저장함.
  • Document: Index 내에 저장되는 JSON 형태의 데이터 단위
    • 테이블의 행에 해당함
    • 특정 인덱스에 저장되며 고유한 _id를 가짐
    • 다양한 field를 가질 수 있음
  • Field: Document 내 데이터 항목
    • 테이블의 열에 해당함
    • 각 필드는 다양한 타입을 가질 수 있으며 Mapping을 통해 타입이 결정됨
POST /products/_doc/1 #/인덱스이름/문서타입/문서ID
#아래 전체가 하나의 document임
{ 
  "name": "IPhone 30 Pro", #하나의 field
  "price": $2250,
  "brand": "Apple"
}
  • Mapping: 인덱스의 스키마 정의, 데이터 타입 지정
    • 필드별 타입 지정(e.g. text, keyword, integer, date...) <= 명시적으로 지정할 수도 있지만 자동 추론(동적 매핑)할 수도 있음
PUT /products
{
  "mappings": {
    "properties": {
      "name":    { 
      	"type": "text",
      	"analyzer": "standard"  // 이 필드에만 standard analyzer 적용},
      "price":   { "type": "float" },
      "brand":   { "type": "keyword" },
      "created": { "type": "date" }
    }
  }
}
  • Analyzer: 텍스트 처리 및 검색 정확성 향상을 위한 분석기
    • 형태소 분리, 소문자화, 불용어 제거 등 전처리 작업 수행
    • 정확도와 성능에 큰 영향을 줌 
      • Analyzer 구성요소  
        • Character Filters: 텍스트 전처리
        • Tokenizer: 텍스트를 토큰으로 분리함
        • Token Filters: 토큰화된 단어들을 소문자로 변환, 어간 추출 등