6.5.4 Path Hierarchy
이 문서의 허가되지 않은 무단 복제나 배포 및 출판을 금지합니다. 본 문서의 내용 및 도표 등을 인용하고자 하는 경우 출처를 명시하고 김종민([email protected])에게 사용 내용을 알려주시기 바랍니다.
디렉토리나 파일 경로 등은 흔하게 저장되는 데이터입니다. 앞의 Pattern 토크나이저에서 "/usr/share/elasticsearch/bin" 를 실행했을 때는 디렉토리명 들이 각각 하나의 토큰으로 분리 된 것을 확인했습니다. 이 경우 다른 패스에 있는데 하위 디렉토리 명이 같은 경우 데이터 검색에 혼동이 올 수 있습니다.
Path Hierarchy 토크나이저를 사용하면 경로 데이터를 계층별로 저장해서 하위 디렉토리에 속한 도큐먼트들을 수준별로 검색하거나 집계하는 것이 가능합니다. 다음은 Path Hierarchy 토크나이저로 "/usr/share/elasticsearch/bin" 를 분석하는 예제입니다.
request
response
path_hierarchy 토크나이저로 문장 분석
1
POST _analyze
2
{
3
"tokenizer": "path_hierarchy",
4
"text": "/usr/share/elasticsearch/bin"
5
}
Copied!
path_hierarchy 토크나이저로 문장 분석 결과
1
{
2
"tokens" : [
3
{
4
"token" : "/usr",
5
"start_offset" : 0,
6
"end_offset" : 4,
7
"type" : "word",
8
"position" : 0
9
},
10
{
11
"token" : "/usr/share",
12
"start_offset" : 0,
13
"end_offset" : 10,
14
"type" : "word",
15
"position" : 0
16
},
17
{
18
"token" : "/usr/share/elasticsearch",
19
"start_offset" : 0,
20
"end_offset" : 24,
21
"type" : "word",
22
"position" : 0
23
},
24
{
25
"token" : "/usr/share/elasticsearch/bin",
26
"start_offset" : 0,
27
"end_offset" : 28,
28
"type" : "word",
29
"position" : 0
30
}
31
]
32
}
Copied!
delimiter 항목값으로 경로 구분자를 지정할 수 있습니다. 디폴트는 / 입니다. 그리고 replacement 옵션을 이용해서 소스의 구분자를 다른 구분자로 대치해서 저장하는 것도 가능합니다. 그 외의 옵션들은 공식 도큐먼트를 참고하시기 바랍니다.
다음은 인덱스 hir_tokenizer- 구분자를 / 구분자로 대치하는 my_hir_tokenizer라는 사용자 정의 토크나이저를 만들고 "one-two-three" 문장을 분석하는 예제입니다.
hir_tokenizer 인덱스에 my_hir_tokenizer 토크나이저 생성
1
PUT hir_tokenizer
2
{
3
"settings": {
4
"analysis": {
5
"tokenizer": {
6
"my_hir_tokenizer": {
7
"type": "path_hierarchy",
8
"delimiter": "-",
9
"replacement": "/"
10
}
11
}
12
}
13
}
14
}
Copied!
request
response
hir_tokenizer 토크나이저로 문장 분석
1
GET hir_tokenizer/_analyze
2
{
3
"tokenizer": "my_hir_tokenizer",
4
"text": [
5
"one-two-three"
6
]
7
}
Copied!
hir_tokenizer 토크나이저로 문장 분석 결과
1
{
2
"tokens" : [
3
{
4
"token" : "one",
5
"start_offset" : 0,
6
"end_offset" : 3,
7
"type" : "word",
8
"position" : 0
9
},
10
{
11
"token" : "one/two",
12
"start_offset" : 0,
13
"end_offset" : 7,
14
"type" : "word",
15
"position" : 0
16
},
17
{
18
"token" : "one/two/three",
19
"start_offset" : 0,
20
"end_offset" : 13,
21
"type" : "word",
22
"position" : 0
23
}
24
]
25
}
Copied!
Copy link