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빠른 추천 시스템에 적합, 기능 제한 있음