⚙️Analyzer 커스터마이징 가이드
이 문서는 Elasticsearch에서 custom analyzer를 설계하고,
nori tokenizer
기반으로 불용어 제거, 품사 필터링, 동의어 처리 등을 적용하는 방법을 다룹니다.
1. ⚙️ analyzer 커스터마이징 개요
✅ custom analyzer란?
custom analyzer = tokenizer + 0개 이상의 filter
- tokenizer: 입력 텍스트를 토큰으로 분해
- filters: 토큰을 소문자화, 불용어 제거, 동의어 처리 등 후처리
2. 주요 filter 종류
필터 이름 | 설명 |
---|---|
lowercase | 모든 텍스트를 소문자로 변환 |
stop | 불용어(stopword) 제거 (는 , 이 , 가 등) |
synonym | 동의어 치환 (예: kakao => 카카오 ) |
nori_part_of_speech | 품사(POS) 필터링 (예: 접속사 제거) |
nori_readingform | 한자 → 발음으로 변환 |
3. 예시: nori 기반 커스텀 analyzer
PUT http://localhost:9200/custom-index
{
"settings": {
"analysis": {
"tokenizer": {
"my_nori_tokenizer": {
"type": "nori_tokenizer",
"decompound_mode": "mixed"
}
},
"filter": {
"my_pos_filter": {
"type": "nori_part_of_speech",
"stoptags": [ "E", "IC", "J", "MAG", "MAJ" ]
},
"my_stop_filter": {
"type": "stop",
"stopwords": [ "의", "가", "이", "은", "는" ]
},
"my_synonym_filter": {
"type": "synonym",
"synonyms": [
"카카오, kakao",
"네이버, naver"
]
}
},
"analyzer": {
"my_korean_analyzer": {
"type": "custom",
"tokenizer": "my_nori_tokenizer",
"filter": [
"lowercase",
"my_pos_filter",
"my_stop_filter",
"my_synonym_filter"
]
}
}
}
},
"mappings": {
"properties": {
"content": {
"type": "text",
"analyzer": "my_korean_analyzer"
}
}
}
}
4. 커스텀 analyzer 분석 테스트
POST http://localhost:9200/custom-index/_analyze
{
"analyzer": "my_korean_analyzer",
"text": "카카오의 새로운 서비스가 시작되었습니다."
}
📌 예상 결과 (필터 적용됨):
카카오
새롭
서비스
시작
되
✅ 요약 정리
구성 요소 | 설명 |
---|---|
tokenizer | nori 기반으로 형태소 분리 |
stop filter | 자주 등장하지만 의미 없는 단어 제거 |
POS filter | 조사, 감탄사 등 의미 없는 품사 제외 |
synonym filter | 사용자 정의 동의어 등록 가능 |
lowercase filter | 대소문자 통일 |