형태소 분석이란?

📌 형태소 분석(Morphological Analysis)은 텍스트를 의미 단위(형태소)로 분리하고 품사를 태깅하는 과정입니다.
Elasticsearch는 형태소 분석을 통해 검색 정확도를 향상시키며, 특히 한국어, 일본어, 중국어처럼 공백이 명확하지 않은 언어에서 필수적으로 사용됩니다.


Elasticsearch에서의 형태소 분석 과정

Elasticsearch에서 형태소 분석은 **토크나이저(Tokenizer)와 필터(Filter)**를 통해 이루어집니다.

(1) 형태소 분석의 기본 흐름

입력 문장 → 토크나이저(Tokenizer) → 토큰 필터(Token Filter) → 색인(Indexing) 또는 검색(Query)

(2) 기본 분석기 (Built-in Analyzers)

Elasticsearch는 다양한 기본 분석기를 제공하지만, 형태소 분석을 수행하려면 **전용 분석기(Analyzer)**를 사용해야 합니다.

분석기 설명

Standard Analyzer 기본 분석기 (공백 및 일부 문장부호 기준으로 단어 분리)
Simple Analyzer 모든 문자를 소문자로 변환하고 공백을 기준으로 단어 분리
Whitespace Analyzer 공백을 기준으로 단어를 분리하지만 추가적인 변형 없음
Keyword Analyzer 전체 문자열을 하나의 단위로 저장 (형태소 분석 없음)
Nori Analyzer 한국어 형태소 분석기
Kuromoji Analyzer 일본어 형태소 분석기
IK Analyzer 중국어 형태소 분석기

Elasticsearch에서 한국어 형태소 분석

Elasticsearch에서 한국어 형태소 분석을 수행하려면 **Nori 분석기(Nori Analyzer)**를 사용합니다.

(1) Nori 분석기란?

  • Elasticsearch 6.4 버전부터 기본 포함된 한국어 형태소 분석기.
  • Lucene 기반으로 개발되었으며, 한국어 문법에 맞는 분석 기능 제공.
  • 형태소 분석과 불용어(Stopwords) 필터링 지원.

Nori 분석기 사용 방법

(1) 기본 형태소 분석 테스트

Elasticsearch의 _analyze API를 사용하여 Nori 분석기를 테스트할 수 있습니다.

예제 1: 형태소 분석 실행

GET _analyze
{
  "analyzer": "nori",
  "text": "나는 엘라스틱서치를 공부하고 있다."
}

결과

{
  "tokens": [
    { "token": "나", "type": "Noun" },
    { "token": "는", "type": "Josa" },
    { "token": "엘라스틱서치", "type": "Noun" },
    { "token": "를", "type": "Josa" },
    { "token": "공부", "type": "Noun" },
    { "token": "하", "type": "Verb" },
    { "token": "고", "type": "Eomi" },
    { "token": "있", "type": "Adjective" },
    { "token": "다", "type": "Eomi" }
  ]
}

Nori 분석기가 문장을 형태소 단위로 분리하고, 품사 태깅을 적용한 것을 확인할 수 있습니다.


(2) Nori 토크나이저(Nori Tokenizer) 설정

Nori 분석기는 다양한 토큰화(Tokenization) 방식을 지원합니다.

PUT /nori_test
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_nori_analyzer": {
          "type": "custom",
          "tokenizer": "nori_tokenizer"
        }
      }
    }
  }
}
  • nori_tokenizer: 한국어 문장을 형태소 단위로 분석하여 색인.

(3) 사용자 사전(Custom Dictionary) 적용

한국어 형태소 분석에서 중요한 요소 중 하나는 사용자 정의 사전(Custom Dictionary) 입니다.
Nori 분석기는 사전을 추가하여 특정 단어를 올바르게 분석할 수 있습니다.

예제 2: 사용자 사전 적용

PUT /nori_test
{
  "settings": {
    "analysis": {
      "tokenizer": {
        "nori_user_dict": {
          "type": "nori_tokenizer",
          "decompound_mode": "mixed",
          "user_dictionary": "userdict_ko.txt"
        }
      },
      "analyzer": {
        "custom_nori_analyzer": {
          "type": "custom",
          "tokenizer": "nori_user_dict"
        }
      }
    }
  }
}
  • user_dictionary 옵션: 사용자 정의 단어를 사전으로 등록.
  • decompound_mode:
    • none: 복합어를 분리하지 않음.
    • mixed: 복합어를 분리하면서 원래 단어도 포함.
    • discard: 복합어를 완전히 분리.

형태소 분석을 활용한 검색 최적화

Elasticsearch에서 형태소 분석기를 활용하면 검색 정확도를 크게 향상시킬 수 있습니다.

(1) 정확한 검색(Query DSL 적용)

GET /nori_test/_search
{
  "query": {
    "match": {
      "content": "엘라스틱서치를 공부"
    }
  }
}

✅ 공부하고 있다라는 문장이 있어도 형태소 분석을 통해 "공부"라는 단어만으로 검색 가능.


(2) 동의어(Synonym) 검색 적용

PUT /nori_test
{
  "settings": {
    "analysis": {
      "filter": {
        "synonym_filter": {
          "type": "synonym",
          "synonyms": [
            "엘라스틱서치, ES",
            "검색엔진, 검색 시스템"
          ]
        }
      },
      "analyzer": {
        "synonym_analyzer": {
          "type": "custom",
          "tokenizer": "nori_tokenizer",
          "filter": ["synonym_filter"]
        }
      }
    }
  }
}

✅ "엘라스틱서치"를 검색해도 "ES"가 포함된 문서도 함께 검색됨.


Elasticsearch 형태소 분석의 장점과 단점

장점

  1. 한국어 문장을 형태소 단위로 분리 → 검색 정확도 향상.
  2. 사용자 사전 적용 가능 → 특정 도메인(의료, 법률 등)에서 최적화 가능.
  3. 동의어 필터, 복합어 분석 지원 → 검색 확장성 증가.

단점

  1. 형태소 분석 결과가 완벽하지 않음 → 사용자 사전 유지보수가 필요.
  2. 복합어 처리 방식이 다양 → 적절한 모드 선택이 중요.
  3. 성능 이슈 가능 → 대량 문서 색인 시 성능 최적화 필요.

결론

  • Elasticsearch는 Nori 분석기를 통해 한국어 형태소 분석을 지원합니다.
  • 형태소 분석을 적용하면 검색 정확도를 크게 향상할 수 있습니다.
  • 사용자 사전을 활용하여 도메인 맞춤형 검색 환경 구축 가능.
  • 동의어 필터, 복합어 설정을 통해 검색 확장 가능.

🚀 Elasticsearch의 형태소 분석 기능을 활용하면 강력한 한국어 검색 시스템을 구축할 수 있습니다!

 

'Elastic Search > Elastic Search 이론' 카테고리의 다른 글

[Elasticsearch] 데이터 색인 (Indexing)  (0) 2025.02.01

데이터 색인이란?

📌 데이터 색인(Indexing)이란 문서를 검색 가능하도록 변환하는 과정을 의미합니다. Elasticsearch와 같은 검색 엔진에서는 원본 문서를 분석하여 검색어 토큰으로 변환한 후 저장하는 과정을 거칩니다. 이를 통해 빠른 검색 및 분석이 가능해집니다.


색인(Indexing)과 검색(Search)의 차이

검색 엔진에서 색인(Indexing)과 검색(Search)은 별개의 과정입니다. 다음과 같은 주요 개념을 이해해야 합니다.

용어 설명

색인(Indexing) [동사] 원본 문서를 분석하여 검색 가능한 형태로 변환하는 과정
인덱스(Index) [명사] 색인된 데이터를 저장하는 논리적 저장소
검색(Search) 인덱스에 저장된 데이터를 찾아서 반환하는 과정
질의(Query) 검색을 수행하기 위해 사용자가 입력하는 검색 조건

Elasticsearch에서의 색인 과정

Elasticsearch에서 색인은 다음과 같은 단계를 거칩니다.

원본 데이터 ➡️ 색인(Indexing) ➡️ 인덱스(Index)에 저장 ➡️ 검색(Search)
  1. 문서 수집
    • 데이터 소스로부터 문서를 가져옴 (예: 로그 파일, 데이터베이스, API 등).
  2. 분석(Analysis)
    • 토큰화(Tokenization): 문장을 단어 단위로 분리.
    • 필터링(Filtering): 불필요한 단어 제거, 형태소 분석, 동의어 처리 등.
  3. 색인 저장
    • 분석된 데이터를 Elasticsearch의 인덱스에 저장.
  4. 검색(Search)
    • 사용자의 질의(Query)에 따라 인덱스를 조회하고 결과 반환.

색인 예제

Elasticsearch에서 색인을 수행하는 기본적인 API 사용법은 다음과 같습니다.

(1) 문서 색인 (Indexing a Document)

PUT /my_index/_doc/1
{
  "title": "Elasticsearch 색인 개요",
  "content": "색인은 문서를 검색 가능하도록 변환하는 과정입니다."
}
  • my_index: 생성할 인덱스 이름.
  • _doc/1: 문서 ID(1).
  • 본문(title, content)이 색인됨.

(2) 색인된 데이터 검색 (Search)

GET /my_index/_search
{
  "query": {
    "match": {
      "content": "검색"
    }
  }
}
  • "content": "검색"을 포함하는 문서를 검색.

색인 시 고려해야 할 사항

(1) 매핑(Mapping) 설정

  • 색인을 수행하기 전에 문서의 데이터 타입을 지정하는 것이 중요합니다.
  • keyword, text, date, integer 등 다양한 데이터 유형을 지원합니다.
PUT /my_index
{
  "mappings": {
    "properties": {
      "title": { "type": "text" },
      "date": { "type": "date" },
      "views": { "type": "integer" }
    }
  }
}

(2) 분석기(Analyzer) 사용

  • Elasticsearch는 기본적으로 **표준 분석기(Standard Analyzer)**를 사용하지만, 데이터 유형에 따라 사용자 정의 분석기를 설정할 수 있습니다.
PUT /my_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "korean_analyzer": {
          "type": "custom",
          "tokenizer": "seunjeon_tokenizer"
        }
      }
    }
  }
}
  • 한국어 분석기를 적용하여 색인할 수 있음.

색인의 장점과 단점

항목 장점 단점

빠른 검색 속도 색인된 데이터는 최적화된 구조로 저장되어 빠르게 검색 가능 색인 과정에서 추가적인 저장 공간 필요
강력한 검색 기능 전문 검색(Full-Text Search), 유사 검색, 동의어 검색 가능 색인 데이터 변경 시 전체 문서를 다시 색인해야 하는 경우 발생
확장성(Scalability) 분산 환경에서 대량의 데이터 색인 가능 색인 전략을 잘못 설정하면 성능 저하 가능

결론

데이터 색인은 Elasticsearch의 핵심 기능으로, 검색 속도를 높이고 효율적인 데이터 분석을 가능하게 합니다.
색인 과정을 최적화하기 위해 적절한 매핑(Mapping)과 분석기(Analyzer) 설정이 필요하며, 문서의 변경 및 업데이트 시 성능 영향을 고려해야 합니다. 🚀

 

'Elastic Search > Elastic Search 이론' 카테고리의 다른 글

[Elasticsearch] 형태소 분석  (0) 2025.02.01

+ Recent posts