Edge n-gram token filter
출처: 문서
본문
Edge n-gram 토큰 필터
edge_ngram 토큰 필터는 특정 문자열을 서로 다른 길이의 부분 문자열로 분할한다는 점에서 ngram 토큰 필터와 매우 유사해요. 다만 edge_ngram 토큰 필터는 토큰의 시작 부분(edge)에서만 n-gram(부분 문자열)을 생성해요. 사용자가 입력하는 대로 단어나 구의 시작 부분을 매칭해야 하는 자동 완성이나 접두사 매칭 같은 시나리오에서 특히 유용해요.
파라미터
edge_ngram 토큰 필터는 다음 파라미터로 설정할 수 있어요.
| 파라미터 | 필수/선택 | 데이터 타입 | 설명 |
|---|---|---|---|
min_gram |
선택 | Integer | 생성될 n-gram의 최소 길이예요. 기본값은 1이에요. |
max_gram |
선택 | Integer | 생성될 n-gram의 최대 길이예요. edge_ngram 필터의 기본값은 1이고, 커스텀 토큰 필터의 기본값은 2예요. 이 파라미터를 낮은 값으로 설정하는 건 피하세요. 값이 너무 낮으면 아주 짧은 n-gram만 생성되어 검색어를 찾지 못하게 돼요. 예를 들어 max_gram이 3으로 설정된 상태에서 "banana"라는 단어를 인덱싱하면, 생성되는 가장 긴 토큰은 "ban"이에요. 사용자가 "banana"로 검색하면 일치하는 결과가 반환되지 않아요. 이런 위험을 완화하려면 truncate 토큰 필터를 검색 애널라이저로 사용할 수 있어요. |
preserve_original |
선택 | Boolean | 출력에 원본 토큰을 포함해요. 기본값은 false예요. |
예시
다음 예제 요청은 edge_ngram_example이라는 이름의 새 인덱스를 생성하고 edge_ngram 필터로 애널라이저를 설정해요:
PUT /edge_ngram_example
{
"settings": {
"analysis": {
"filter": {
"my_edge_ngram": {
"type": "edge_ngram",
"min_gram": 3,
"max_gram": 4
}
},
"analyzer": {
"my_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": ["lowercase", "my_edge_ngram"]
}
}
}
}
}
{% include copy-curl.html %}
생성된 토큰
애널라이저가 생성한 토큰을 확인하려면 다음 요청을 사용해 보세요:
POST /edge_ngram_example/_analyze
{
"analyzer": "my_analyzer",
"text": "slow green turtle"
}
{% include copy-curl.html %}
응답에는 생성된 토큰이 담겨 있어요:
{
"tokens": [
{
"token": "slo",
"start_offset": 0,
"end_offset": 4,
"type": "<ALPHANUM>",
"position": 0
},
{
"token": "slow",
"start_offset": 0,
"end_offset": 4,
"type": "<ALPHANUM>",
"position": 0
},
{
"token": "gre",
"start_offset": 5,
"end_offset": 10,
"type": "<ALPHANUM>",
"position": 1
},
{
"token": "gree",
"start_offset": 5,
"end_offset": 10,
"type": "<ALPHANUM>",
"position": 1
},
{
"token": "tur",
"start_offset": 11,
"end_offset": 17,
"type": "<ALPHANUM>",
"position": 2
},
{
"token": "turt",
"start_offset": 11,
"end_offset": 17,
"type": "<ALPHANUM>",
"position": 2
}
]
}