Ngram
Ngram 카테고리의 모든 포스트 - 한국어
1개의 포스트
🔤 자동완성 & ngram 검색 전략
이 문서는 검색어 자동완성 기능을 구현할 때 사용되는 Elasticsearch 전략을 설명합니다.
prefix
,edge_ngram
,completion
세 가지 접근 방식과 각각의 장단점, 설정 방법을 다룹니다.
1. 📌 자동완성 구현 방식 비교
방식 | 장점 | 단점 |
---|---|---|
prefix | 설정 간단, 기본 기능 | 검색 정확도 낮음, 노이즈 발생 |
edge_ngram | 검색어 조합 다양, 부분일치 가능 | 인덱스 용량 증가, 튜닝 필요 |
completion | 속도 빠름, 추천어에 적합 | 기능 제한, 스코어 커스터마이징 어려움 |
2. ✍️ prefix 쿼리 예시
{
"query": {
"prefix": {
"title": "카카"
}
}
}
- 사용자가 “카카” 입력 시 “카카오”, “카카시”, “카카푸” 등 반환
- 정확도보다 간단한 시작 단어 기반 매칭에 적합
3. 🧱 edge_ngram 기반 분석기 설정 예시
매핑 설정
{
"settings": {
"analysis": {
"tokenizer": {
"autocomplete_tokenizer": {
"type": "edge_ngram",
"min_gram": 1,
"max_gram": 20,
"token_chars": ["letter", "digit"]
}
},
"analyzer": {
"autocomplete": {
"tokenizer": "autocomplete_tokenizer",
"filter": ["lowercase"]
},
"autocomplete_search": {
"tokenizer": "standard",
"filter": ["lowercase"]
}
}
}
},
"mappings": {
"properties": {
"title": {
"type": "text",
"analyzer": "autocomplete",
"search_analyzer": "autocomplete_search"
}
}
}
}
autocomplete_tokenizer
:edge_ngram
기반으로 부분 토큰 생성search_analyzer
: 표준 분석기로 검색어 그대로 사용
4. 🔍 검색 쿼리 예시 (edge_ngram)
{
"query": {
"match": {
"title": {
"query": "카카"
}
}
}
}
- 사용자가
카카
라고 검색하면카카오
,카카시
,카카XX
모두 검색 가능 - 토큰화 예시 (카카오):
카
,카카
,카카오
5. ⚡ completion 필드 예시
매핑 설정
{
"mappings": {
"properties": {
"suggest": {
"type": "completion"
}
}
}
}
검색 쿼리
{
"suggest": {
"title-suggest": {
"prefix": "카카",
"completion": {
"field": "suggest"
}
}
}
}
- autocomplete에 특화된 데이터 구조로 빠른 추천
- 단점: 일반적인 match 쿼리와 통합 어려움
✅ 요약 정리
전략 | 설명 |
---|---|
prefix | 간단하지만 정확도 낮고 유연성 부족 |
edge_ngram | 강력한 자동완성 구현 가능, 인덱스 용량 증가 주의 |
completion | 빠른 추천 시스템에 적합, 기능 제한 있음 |