본문 바로가기

Elasticsearch (ELK)/Elasticsearch

7-4. 데이터 색인과 텍스트 분석(실전) - Tokenizer

Tokenizer는 반드시 한가지만 사용된다.

 

1. Standard, Letter, Whitespace 

  • Standard : 공백으로 텀을 구분하면서 "@"과 같은 일부 특수문자를 제거한다 (중간의 특수문자는 분리하지 않는다).
  • Letter : 알파벳을 제외한 모든 공백 캐릭터를 기준으로 분리한다.
  • Whitespace : 스페이스, 탭, 줄바꿈과 같은 공백만을 가지고 분리한다.

 

분석할 문장 : "THE quick.brown_FOx jumped! @ 3.5 meters."

// standard 토크나이저로 문장 분석
GET _analyze
{
  "tokenizer": "standard",
  "text": "THE quick.brown_FOx jumped! @ 3.5 meters."
}
// THE, quick.brown_FOx, jumped, 3.5, meters 

// letter 토크나이저로 문장 분석
GET _analyze
{
  "tokenizer": "letter",
  "text": "THE quick.brown_FOx jumped! @ 3.5 meters."
}
// THE, quick, brown, FOx, jumped, meters

// whitespace 토크나이저로 문장 분석
GET _analyze
{
  "tokenizer": "whitespace",
  "text": "THE quick.brown_FOx jumped! @ 3.5 meters."
}
// THE, quick.brown_FOx, jumped!, @, 3.5, meters.

 

2. UAX URL Email

URL 이나 Email을 위한 Tokenizer

 

GET _analyze
{
  "tokenizer": "uax_url_email",
  "text": "email address is my-name@email.com and website is https://www.elastic.co"
}

// email, address, is, my-name@email.com, and, website, is, https://www.elastic.co

3. Pattern

Pattern 지정도 가능하다.

PUT pat_tokenizer
{
  "settings": {
    "analysis": {
      "tokenizer": {
        "my_pat_tokenizer": {
          "type": "pattern",
          "pattern": "/"
        }
      }
    }
  }
}

// my_pat_tokenizer 토크나이저로 문장 분석
GET pat_tokenizer/_analyze
{
  "tokenizer": "my_pat_tokenizer",
  "text": "/usr/share/elasticsearch/bin"
}

 

"pattern": "(?<=\\p{Lower})(?=\\p{Upper})"
와 같은 정규식(Regular Expression) 으로도 설정이 가능합니다.

 

4. Path Hierarchy

데이터를 계층별로 저장가능하다.

 

Default Use 

// path_hierarchy 토크나이저로 문장 분석
POST _analyze
{
  "tokenizer": "path_hierarchy",
  "text": "/usr/share/elasticsearch/bin"
}
// /usr, /usr/share, /usr/share/elasticsearch, /usr/share/elasticsearch/bin

 

Using Delimiter

// hir_tokenizer 인덱스에 my_hir_tokenizer 토크나이저 생성
PUT hir_tokenizer
{
  "settings": {
    "analysis": {
      "tokenizer": {
        "my_hir_tokenizer": {
          "type": "path_hierarchy",
          "delimiter": "-",
          "replacement": "/"
        }
      }
    }
  }
}

// hir_tokenizer 토크나이저로 문장 분석
GET hir_tokenizer/_analyze
{
  "tokenizer": "my_hir_tokenizer",
  "text": [
    "one-two-three"
  ]
}

// one, one/two, one/two/three