이 문서의 허가되지 않은 무단 복제나 배포 및 출판을 금지합니다. 본 문서의 내용 및 도표 등을 인용하고자 하는 경우 출처를 명시하고 김종민([email protected])에게 사용 내용을 알려주시기 바랍니다.
Pattern Replace 캐릭터 필터는 정규식(Regular Expression)을 이용해서 좀더 복잡한 패턴들을 치환할 수 있는 캐릭터 필터입니다. 다음은 카멜 표기법(camelCase)으로 된 단어를 대문자가 시작하는 단위 마다 공백을 삽입하여 세부 단어별로 토크나이징 될 수 있도록 camel 인덱스에 camel_analyzer 라는 애널라이저를 생성하는 예제입니다.
camel 인덱스에 pattern_replace 캐릭터 필터 설정
1
PUT camel
2
{
3
"settings":{
4
"analysis":{
5
"analyzer":{
6
"camel_analyzer":{
7
"char_filter":[
8
"camel_filter"
9
],
10
"tokenizer":"standard",
11
"filter":[
12
"lowercase"
13
]
14
}
15
},
16
"char_filter":{
17
"camel_filter":{
18
"type":"pattern_replace",
19
"pattern":"(?<=\\p{Lower})(?=\\p{Upper})",
20
"replacement":" "
21
}
22
}
23
}
24
}
25
}
Copied!
이제 camel 인덱스에서 "FooBazBar" 라는 단어를 분석 해 보면 다음과 같이 foo, baz, bar 세개의 단어로 분리되는 것을 확인할 수 있습니다.
request
response
camel_analyzer 애널라이저로 문장 분석
1
GET camel/_analyze
2
{
3
"analyzer":"camel_analyzer",
4
"text":[
5
"public void FooBazBar()"
6
]
7
}
Copied!
camel_analyzer 애널라이저로 문장 분석 결과
1
{
2
"tokens":[
3
{
4
"token":"public",
5
"start_offset":0,
6
"end_offset":6,
7
"type":"<ALPHANUM>",
8
"position":0
9
},
10
{
11
"token":"void",
12
"start_offset":7,
13
"end_offset":11,
14
"type":"<ALPHANUM>",
15
"position":1
16
},
17
{
18
"token":"foo",
19
"start_offset":12,
20
"end_offset":14,
21
"type":"<ALPHANUM>",
22
"position":2
23
},
24
{
25
"token":"baz",
26
"start_offset":15,
27
"end_offset":17,
28
"type":"<ALPHANUM>",
29
"position":3
30
},
31
{
32
"token":"bar",
33
"start_offset":18,
34
"end_offset":21,
35
"type":"<ALPHANUM>",
36
"position":4
37
}
38
]
39
}
Copied!
캐릭터 필터는 토크나이저가 적용되기 이전에 해당 필드 전체 내용을 치환하는 일종의 전처리 작업입니다. 유사한 기능을 구현하여 적용하더라도 뒤에 나올 토큰필터에서 텀을 처리하는 것과는 결과에 있어 position 같은 값들의 차이가 생깁니다.