상위: Elasticsearch
요약
Analyzer는 텍스트를 분석하여 검색 가능한 토큰(Token)으로 변환하는 도구입니다. 색인 시점과 검색 시점에 사용됩니다.
구성 요소
- Character Filter: 입력 텍스트 전처리 (예: HTML 태그 제거).
- Tokenizer: 텍스트를 토큰 단위로 분리 (예: 공백 기준, 형태소 기준). 필수 요소.
- Token Filter: 분리된 토큰 가공 (예: 소문자 변환, 불용어 제거, 동의어 처리).
Custom Analyzer
기본 제공 Analyzer 외에, 위 구성 요소들을 조합하여 사용자 정의 Analyzer를 만들 수 있습니다.
_analyzeAPI를 통해 테스트 가능합니다.
한국어 분석 (Nori Analyzer)
- Elasticsearch 공식 한국어 분석기 플러그인.
- nori_tokenizer: 한국어 형태소 분석.
- nori_part_of_speech: 품사 필터링.
- nori_readingform: 한자/외래어를 한글 발음으로 변환.
- nori_number: 숫자 표준화
Nori Tokenizer 옵션
"tokenizer": {
"nori_tokenizer": {
"type": "nori_tokenizer",
"decompound_mode": "mixed",
"discard_punctuation": "false",
"user_dictionary": "dictionary/userdic_ko.txt"
}
}
_analyze API
커스텀 분석기를 테스트할 수 있는 API입니다.
POST _analyze
{
"analyzer": "whitespace",
"text": "삼성 청년 SW 아카데미"
}
Custom Analyzer 조합
여러 요소를 조합하여 custom analyzer를 생성할 수 있습니다.
- tokenizer는 1개만 사용 가능
- char_filter, filter는 여러 개 적용 가능
GET _analyze
{
"char_filter": ["html_strip"],
"tokenizer": "whitespace",
"filter": ["stop", "lowercase"],
"text": "<b>삼성 갤럭시</b> S25 Ultra"
}
동의어 처리
색인 시 동의어 처리
- 문서가 색인될 때 동의어 확장 저장
- 단점: 색인 크기 증가, 새 동의어 추가 시 재색인 필요
검색 시 동의어 처리
- 쿼리 시점에 동의어 확장
- 단점: 성능 저하 가능, 오탐 위험
동의어 구성 방식
// 동등 관계 (A, B): A 입력 시 B도 매칭
"synonyms": ["notebook, laptop"]
// 치환 관계 (A → B): A가 B로 치환
"synonyms": ["notebook => laptop"]
불용어 (Stopword) 처리
config/dictionary/stopwords.txt 파일에 한 줄당 하나의 단어로 저장합니다.
PUT /products
{
"settings": {
"index": {
"analysis": {
"analyzer": {
"search_stop_analyzer": {
"tokenizer": "whitespace",
"filter": ["search_stop_filter"]
}
},
"filter": {
"search_stop_filter": {
"type": "stop",
"stopwords_path": "dictionary/stopwords.txt"
}
}
}
}
}
}