Elasticsearch – Text Analysis
3단계
Elasticsearch의 애널라이저는,
0 ~ 3 개의 Character Filter,
1개의 Tokenizer,
그리고 0 ~ n 개의 Token Filter 로 이루어집니다.
Character Filter
Data type text 가 입력되면 가장 먼저 0 ~ 3 개의 Character Filter 가 적용됩니다.
이 단계에서는 text 에서 특정 문자를 replace 또는 제거하게 됩니다.
Character Filter 종류
-
HTML Strip Character Filter
html 을 제거합니다.
GET /_analyze
{ "tokenizer": "keyword", "char_filter": [ "html_strip" ], "text": "<p>I'm so <b>happy</b>!</p>" }
response
{ "tokens": [ { "token": " I'm so happy! ", "start_offset": 0, "end_offset": 32, "type": "word", "position": 0 } ] }
-
Mapping Character Filter
문자 또는 문자열을 다른 문자 또는 문자열로 변환해 줍니다.
mappings
: 배열을 데이타로 합니다.mappings_path
: 파일에 매핑정보를 저장할 수 있습니다.
GET /_analyze
{ "tokenizer": "keyword", "char_filter": [ { "type": "mapping", "mappings": [ "c++ => c_plus_plus" ] } ], "text": "c++" }
response
{ "tokens": [ { "token": "c_plus_plus", "start_offset": 0, "end_offset": 3, "type": "word", "position": 0 } ] }
-
Pattern Replace Character Filter
Java 정규식을 이용한 변환을 합니다.
Tokenizer
Character Filter 를 통과한 text 는 1개의 Tokenizer 에 의해,
N 개의 단어로 분리됩니다.
예를 들어, whitespace Tokenizer 는 공백문자를 기준으로 단어를 추출해 냅니다.
Tokenizer 종류
단어 기반
-
Standard Tokenizer
whitespace Tokenizer 와 유사하지만, 마침표 물음표, 마이너스 등을 제거합니다.
POST _analyze
{ "tokenizer": "standard", "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone." }
-
Whitespace Tokenizer
공백문자를 기준으로 단어를 추출합니다.
마침표 물음표 등을 제거하지 않습니다. -
Classic Tokenizer
영어에 특화된 Tokenizer 입니다.
이메일주소, 도메인, 전화번호 등을 인식합니다.
단어 조각화
-
N-Gram Tokenizer
sliding window 방식으로 단어를 조각화 합니다.
sliding window 란 오른쪽으로 이동하면서,
일정한 길이만큼 단어를 조각내는 방식입니다.띄어쓰기 안된 한글을 토크나이징 하기에 적합합니다.
quick → [qu, ui, ic, ck]
token_chars
에는letter
,digit
,whitespace
,punctuation
,symbol
,custom
이 포함될 수 있습니다.
custom
을 쓰기 위해서는custom_token_chars
가 세팅되어 있어야 합니다.PUT my_index
{ "settings": { "max_ngram_diff": 20, "analysis": { "analyzer": { "my_analyzer": { "tokenizer": "my_tokenizer" } }, "tokenizer": { "my_tokenizer": { "type": "ngram", "custom_token_chars": "+-_'", "min_gram": 1, "max_gram": 20, "token_chars": [ "letter", "digit", "custom" ] } } } } }
POST my_index/_analyze
{ "analyzer": "my_analyzer", "text": "1800사무용책상" }
-
Edge N-Gram Tokenizer
첫글자를 시작점으로 글자수를 늘려가면서 단어를 조각냅니다.
quick → [q, qu, qui, quic, quick]
구조화된 단어
……
Token Filter
Tokenizer 를 거친 단어들은 Token Filter 에 의해 정제됩니다.
예를 들어, lowercase 는 모든 단어를 소문자로 변경합니다.