형태소 분석이란?
📌 형태소 분석(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 형태소 분석의 장점과 단점
✅ 장점
- 한국어 문장을 형태소 단위로 분리 → 검색 정확도 향상.
- 사용자 사전 적용 가능 → 특정 도메인(의료, 법률 등)에서 최적화 가능.
- 동의어 필터, 복합어 분석 지원 → 검색 확장성 증가.
❌ 단점
- 형태소 분석 결과가 완벽하지 않음 → 사용자 사전 유지보수가 필요.
- 복합어 처리 방식이 다양 → 적절한 모드 선택이 중요.
- 성능 이슈 가능 → 대량 문서 색인 시 성능 최적화 필요.
결론
- Elasticsearch는 Nori 분석기를 통해 한국어 형태소 분석을 지원합니다.
- 형태소 분석을 적용하면 검색 정확도를 크게 향상할 수 있습니다.
- 사용자 사전을 활용하여 도메인 맞춤형 검색 환경 구축 가능.
- 동의어 필터, 복합어 설정을 통해 검색 확장 가능.
🚀 Elasticsearch의 형태소 분석 기능을 활용하면 강력한 한국어 검색 시스템을 구축할 수 있습니다!
'Elastic Search > Elastic Search 이론' 카테고리의 다른 글
[Elasticsearch] 데이터 색인 (Indexing) (0) | 2025.02.01 |
---|