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

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

더 알아보기 (Learn more)