엔지니어 블로그

[Elasticseach] Path Hierarachy Tokenizer 본문

ELK/elasticsearch

[Elasticseach] Path Hierarachy Tokenizer

안기용 2023. 7. 25. 13:49

Path hierachy tokenizer

Elasticsearch에서 계층적인 구조의 데이터를 다루기 위해 사용한 path hierachy 토크나이저에 대한 내용입니다.

공식문서 소개

path hierachy 토크나이저는 파일시스템과 유사한 계층적인 값을 받아 경로 구분자를 기준으로 분리하며, 트리의 각 구성요소에 대한 용어를 생성한다.

영어 원문을 직역해서 약간 어색한 감이 있지만, 계층 구조의 데이터를 구분자 기준으로 나누어 계층별로 텀을 생성해 주는 토크나이저 라고 생각하면 편하다.

실행 예시

#request
curl -X POST "localhost:9200/_analyze?pretty" -H 'Content-Type: application/json' -d'
{
  "tokenizer": "path_hierarchy",
  "text": "/home/elastic/elasticsearch"
}

#response
[/home,/home/elastic,/home/elastic,/home/elastic/elasticsearch]

index 생성

PUT my-index-000001
{
  "mappings" : {
    "properties" : {
      "path" :{
        "type" : "text",
        "analyzer" : "path_tree",
        "fields" : {
          "reverse" : {
            "type" : "text",
            "analyzer" : "path_tree_reverse"
          }
        }
      }
    }
  },
  "settings": {
    "analysis": {
      "analyzer": {
        "path_tree": {
          "tokenizer": "path_tokenizer"
        },
        "path_tree_reverse": {
          "tokenizer": "path_tokenizer_reverse"
        }
      },
      "tokenizer": {
        "path_tokenizer": {
          "type": "path_hierarchy",
          "delimiter": "/",
        },
        "path_tokenizer_reverse": {
          "type": "path_hierarchy",
          "delimiter": "/",
          "reverse" : "true"
        }
      }
    }
  }
}

PUT my-index-000001/_doc/1
{
    "path" : "/home/elastic/elasticsearch/config"
}

옵션

option desc
delimiter 구분자로 사용될 문자 지정. 기본값 '/'
replacement 구분자를 대체할 문자 지정(optional)
buffer_size 한번의 처리로 용어 버퍼로 읽는 문자의 수
reverse 계층을 역순으로 출력
skip 건너 뛸 초기 토큰의 수. 기본값 0

termvectors

termvectors를 확인해보면 다음과 같다

GET my-index-000001/_termvectors/1?fields=path


{
    ...
            "terms": {
                "/home": {
                    "term_freq": 1,
                    "tokens": [
                        {
                            "position": 0,
                            "start_offset": 0,
                            "end_offset": 5
                        }
                    ]
                },
                "/home/elastic": {
                    "term_freq": 1,
                    "tokens": [
                        {
                            "position": 0,
                            "start_offset": 0,
                            "end_offset": 13
                        }
                    ]
                },
                "/home/elastic/elasticsearch": {
                    "term_freq": 1,
                    "tokens": [
                        {
                            "position": 0,
                            "start_offset": 0,
                            "end_offset": 27
                        }
                    ]
                },
                "/home/elastic/elasticsearch/config": {
                    "term_freq": 1,
                    "tokens": [
                        {
                            "position": 0,
                            "start_offset": 0,
                            "end_offset": 34
                        }
                    ]
                }
            }
        }
    }
}

이 문서는 Elsaticsearch 공식 문서를 보고 작성한 내용입니다.