본문 바로가기
WIKI 기술 지식 베이스

N-gram tokenizer

원문 보기 위키 갱신

출처: 문서

본문

N-gram 토크나이저

ngram 토크나이저는 텍스트를 지정된 길이의 겹치는 n-gram(문자 시퀀스)으로 분할해요. 이 토크나이저는 원본 입력 텍스트의 부분 문자열(문자 n-gram)을 생성하기 때문에 부분 단어 일치나 자동 완성 검색 기능을 수행하려 할 때 특히 유용해요.

사용 예시

다음 예시 요청은 my_index라는 새 인덱스를 생성하고 ngram 토크나이저로 분석기를 구성해요:

PUT /my_index
{
  "settings": {
    "analysis": {
      "tokenizer": {
        "my_ngram_tokenizer": {
          "type": "ngram",
          "min_gram": 3,
          "max_gram": 4,
          "token_chars": ["letter", "digit"]
        }
      },
      "analyzer": {
        "my_ngram_analyzer": {
          "type": "custom",
          "tokenizer": "my_ngram_tokenizer"
        }
      }
    }
  }
}

{% include copy-curl.html %}

생성된 토큰

다음 요청을 사용하여 분석기로 생성된 토큰을 확인해요:

POST /my_index/_analyze
{
  "analyzer": "my_ngram_analyzer",
  "text": "OpenSearch"
}

{% include copy-curl.html %}

응답에는 생성된 토큰이 포함돼요:

{
  "tokens": [
    {"token": "Sea","start_offset": 0,"end_offset": 3,"type": "word","position": 0},
    {"token": "Sear","start_offset": 0,"end_offset": 4,"type": "word","position": 1},
    {"token": "ear","start_offset": 1,"end_offset": 4,"type": "word","position": 2},
    {"token": "earc","start_offset": 1,"end_offset": 5,"type": "word","position": 3},
    {"token": "arc","start_offset": 2,"end_offset": 5,"type": "word","position": 4},
    {"token": "arch","start_offset": 2,"end_offset": 6,"type": "word","position": 5},
    {"token": "rch","start_offset": 3,"end_offset": 6,"type": "word","position": 6}
  ]
}

파라미터

ngram 토크나이저는 다음 파라미터로 구성할 수 있어요.

파라미터 필수/선택 데이터 타입 설명
min_gram 선택 Integer n-gram의 최소 길이예요. 기본값은 1이에요.
max_gram 선택 Integer n-gram의 최대 길이예요. 기본값은 2이에요.
token_chars 선택 List of strings 토큰화에 포함할 문자 클래스예요. 유효한 값은 다음과 같아요:
- letter
- digit
- whitespace
- punctuation
- symbol
- custom (custom_token_chars 파라미터도 지정해야 해요)
기본값은 빈 목록([])이며, 모든 문자를 유지해요.
custom_token_chars 선택 String 토큰에 포함할 사용자 지정 문자예요.

min_gram과 max_gram의 최대 차이

min_gram과 max_gram의 최대 차이는 인덱스 수준의 index.max_ngram_diff 설정을 사용하여 구성되며 기본값은 1이에요.

다음 예시 요청은 사용자 지정 index.max_ngram_diff 설정으로 인덱스를 생성해요:

PUT /my-index
{
  "settings": {
    "index.max_ngram_diff": 2, 
    "analysis": {
      "tokenizer": {
        "my_ngram_tokenizer": {
          "type": "ngram",
          "min_gram": 3,
          "max_gram": 5,
          "token_chars": ["letter", "digit"]
        }
      },
      "analyzer": {
        "my_ngram_analyzer": {
          "type": "custom",
          "tokenizer": "my_ngram_tokenizer"
        }
      }
    }
  }
}

{% include copy-curl.html %}

더 알아보기 (Learn more)