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 %}