Cloud

[AWS] Elastisearch Analyzer- 데이터가 검색되는 원리(텍스트 분석/처리)

leejunkim 2025. 11. 27. 11:00

근본 - 검색이 잘되도록 데이터를 저장하면 된다..!

 

문서는 ES DB에 저장되기 전에, 분석기(Analyzer)라는 과정을 한번 거친다.

[10분 테크톡] 다로의 Elasticsearch - https://youtu.be/0r0-R8NhINs?si=g5YVVlwOVGTQOUXa

  • 정확하게 말하면, 문서의 필드 타입 중에 TEXT라는 문장들은 분석기를 거치고 DB에 저장된다!
  • 분석기에는 Character Filter, Tokenizer, Token Filter이 있다

여기서 잠깐 - TEXT vs KEYWORD

  • ES에서 문자열을 저장하는 타입은 크게 두가지다 - 그냥 분석기를 거치냐 안거치냐의 차이다.
  • TEXT
    • 분석기를 통해 문장이 토큰 (단어)로 쪼개진다.
    • 전문 검색 (full text search)에 쓰이는데, 예를 들면 "애플 맥북 프로"라고 저장해두고 "맥북"만 검색해도 찾고 싶을 때 사용된다.
    • 이 블로그 글은 TEXT 기반의 예시로 작성됐다.
  • KEYWORD
    • 분석기를 거치지 않고 문장 통째로 하나의 토큰으로 저장된다!
    • 용도는 정확한 일치 검색, 필터링, 정렬, 집계 등이 있다.
    • 보통 카테고리("가전"), 브랜드명("Apple"), 상태("판매중") 같은 데이터에 사용된다.
  • 보통 제목이나 내용은 text로, 카테고리나 태그는 keyword로 설정한다고 한다.

Analyzer (분석기)

  • Analyzer(분석기)
    • 분석기는 텍스트를 처리하는 전체 파이프라인이다.
    • Character Filter, Tokenizer, Token Filter로 이 3가지의 과정을 거친다
  • 다양한 분석기가 있음
    • 모든 분석기는 위의 파이프라인이 포함되고, 분석기마다 다른 filter/tokenizer를 사용함
    • Standard analyzer (기본, 영어에 최적)
    • Nori Analyzer (한국어)
    • Whitespace Analyzer
      • 오직 공백 (띄어쓰기)만 기준으로 함
    • Keyword Analyzer
      • 자르지 않고 입력된 문장 전체를 하나의 토큰으로 함
    • Custom Analyzer (커스텀)
      • 실무에서는 기본 세트를 쓰는 것보단 필요한 것들을 조립해서 커스텀 분석기를 만드는 경우가 많음

1단계 - Character Filter 

  • 원본 문자 스트림을 입력받아 문자 단위의 전처리 (추가, 제거, 변경)를 수행한다.

[10분 테크톡] 다로의 Elasticsearch - https://youtu.be/0r0-R8NhINs?si=g5YVVlwOVGTQOUXa

2단계 -Tokenizer

Character Filter가 전처리한 문자 스트림을 받아 검색의 기본 단위인 토큰으로 분리한다. 텍스트 분석 과정 중 가장 큰 영향을 끼치는 단계이다!

[10분 테크톡] 다로의 Elasticsearch - https://youtu.be/0r0-R8NhINs?si=g5YVVlwOVGTQOUXa

  • 분석 과정 중에서 토크나이저는 딱 한 개만 사용 가능하다. 
  • standard (공백 기준, 특수 문자 제거), letter (공백,기호,숫자), whitespace(오직 공백), 한글 형태소 분석기(nori) 등

3단계 -Token Filter

Tokenizer가 생성한 토큰 스트림을 입력받아 토큰 자체를 수정/추가/제거하는 후처리 (post processing)을 담당한다.

 

[10분 테크톡] 다로의 Elasticsearch - https://youtu.be/0r0-R8NhINs?si=g5YVVlwOVGTQOUXa

  • 만약에 사용하가 "셔츠"라고 검색했지만 판매자는 상품명을 "shirt"라고 영어로 등록했을 수도 있다.
    • 이때 개발자가 직접 사전을 넣어주어야 한다. 현재 Token Filter 단계에서 synonym 필터를 끼워 넣고, 개발자가 설정 파일에 셔츠, shirt라고 적어둔다.
    • 그러면 만약에 ["블루", "셔츠"] 라는 토크나이저 데이터가 들어올 때, 토큰 필터는 "셔츠"랑 "shirt"가 동의어로 인식해서 ["블루", "셔츠", "shirt"] 로 토큰을 추가한다. 그 결과 인덱스에 "shirt'도 같이 저장된다.
    • 이제 사용자가 "shirt"로 검색해도 "블루 셔츠"가 검색된다.
  • 이제 결과를 저장하는 것만 남았다.

역색인 저장

  • 낱말이나 숫자와 같은 내용물로부터의 매핑 정보를 데이터베이스 파일의 특정 지점이나 문서 또는 문서 집합 안에 저장하는 색인 데이터 구조다. (포스팅 1에서 잠깐 다뤘다 - https://leejunkim.tistory.com/68)
  • 토큰들을 역색인을 하면, 단어를 기준으로 문서 아이디를 배열 형태로 가지고 있다

[10분 테크톡] 다로의 Elasticsearch - https://youtu.be/0r0-R8NhINs?si=g5YVVlwOVGTQOUXa

 

위에 보이는 Term | Document 구조는 한 샤드 내부의 데이터 구조라고 생각하면 된다.

검색이 이루어 지는 과정

  1. 영어 단어 "shirts"로 검색을 한다
  2. Term에서 shirts를 찾고, 문서 아이디 1,2를 찾는다
  3. 아이디 1,2를 가진 문서들을 찾아서 반환한다 

더 큰 시나리오로 이해하기

데이터가 100만 개가 있다고 치고, 이 데이터를 한번에 관리하기 힘들어서 이걸 5개로 쪼갰다고 치자.

  • 저장 과정:
    • 문서 1~20만 -> 1번 샤드 안에 작은 역색인 테이블로 저장
    • 문서 21~40만 -> 2번 샤드 안에 작은 역색인 테이블로 저장
    • ... (이렇게 분산됨)
    • 그리고 이 샤드들은 여러 노드(컴퓨터)에 분산되어 저장된다
  • 검색 과정 (분산 처리):
    1. 사용자가 "shirts"를 검색함
    2. 요청을 받은 노드는 모든 샤드에게 각자 가지고 있는 테이블 (역색인) 안에서 "shirts"찾으라는 명령을 내림
      • 1번 샤드의 테이블에는 1, 5번 문서에 있고 2번 샤드의 테이블엔 25번 문서에 있다는 걸 발견
    3. 결과를 취합해서 사용자에게 1, 5, 25번 문서를 반환함

자료

'Cloud' 카테고리의 다른 글

[AWS] Elastisearch - 인프라 기본 개념 정리  (0) 2025.11.26
[AWS] RDS VS EC2 비교와 차이점  (7) 2025.08.25