기록하는 습관

Elasticsearch (10) - English 분석 본문

개발/Elasticsearch

Elasticsearch (10) - English 분석

로그뉴 2022. 7. 6. 17:29

ES with English 분석

 

분석 문장: “It's my PReTty.hat_Yellow! $20.12 15.5% on sale. i ate pizza”

 

** Tokenizer로 분류

 

1.      Standard

공백으로 텀을 구분하면서 일부 특수문자 제거

Filter Result 분석 속도
- It’s my, PReTty.hat_Yellow, 20.12, 15.5, on, sale, i, ate, pizza 4ms
lowercase It's, my, pretty.hat_yellow, 20.12, 15.5, on, sale, i, ate, pizza 4ms
Stemmer It’, my, PReTty.hat_Yellow, 20.12, 15.5, on, sale, i, at, pizza
특징: It’s -> It’, ate -> at
4ms
1.lowercase
2.stop
It’s, my, pretty.hat_yellow, 20.12, 15.5, sale, i, ate, pizza
특징: 기본 불용어 “on” 제거. Elastic에서 기본적으로 제공하는 영어 불용어는 소문자이기 때문에 lowercase filter를 거쳐야 한다.
4ms

 

·        의문. Stemmer 필터를 거치면 ate -> at이 되어 버림.

 

2.      Letter

알파벳을 제외한 모든 공백, 숫자, 기호들을 기준으로 텀을 분리

Filter Result 분석 속도
- It, s, my, PReTty, hat, Yellow, on, sale, i, ate, pizza 4ms
lowercase it, s, my, pretty, hat, yellow, on, sale, i, ate, pizza 4ms
Stemmer It, s, my, PReTti, hat, Yellow, on, sale, i, at, pizza
특징: pretty -> pretti, ate -> at
4ms
1.lowercase
2.stop
s, my, pretty, hat, yellow, sale, i, ate, pizza
특징: 기본 불용어 “it”, “on” 제거.
3ms

 

 

3.      Whitespace

스페이스, , 줄바꿈 같은 공백만을 기준으로 텀을 분리

Filter Result 분석 속도
- It’s, my, PReTty.hat_Yellow!, $20.12, 15.5%, on, sale., i, ate, pizza 4ms
lowercase It’s, my, pretty.hat_yellow!, $20.12, 15.5%, on, sale., i, ate, pizza 3ms
Stemmer It’, my, PReTty.hat_Yellow!, $20.12, 15.5%, on, sale., i, at, pizza
특징: It’s -> It’, ate -> at
4ms
1.lowercase
2.stop
it's, my, pretty.hat_yellow!, $20.12, 15.5%, sale., i, ate, pizza
특징: 기본 불용어 “on” 제거.
3ms

 

** Standard, Whitespace It’s가 분리가 안되지만 letter It으로 분리가 되어 stop 필터를 거치면 불용어 제거 처리가 된다.

 

4.      Ngram

N글자씩 토큰화 하는 필터

적용한 옵션:       "tokenizer": {

        "type": "ngram",

        "min_gram": 2,

        "max_gram": 3,

        "token_chars": [

            "letter",

            "digit"

        ]

  },

Filter Result 분석 속도
lowercase it, my, pr, pre, re, ret, et, ett, tt, tty, ty, ha, hat, at, ye, yel, el, ell, ll, llo, lo, low, ow, 20, 12, 15, on, sa, sal, al, ale, le, at, ate, te, pi, piz, iz, izz, zz, zza, za 4ms
1.lowercase
2.Stemmer
lowercase와 동일 3ms
1.lowercase
2.stop
my, pr, pre, re, ret, et, ett, tt, tty, ty, ha, hat, ye, yel, el, ell, ll, llo, lo, low, ow, 20, 12, 15, sa, sal, al, ale, le, ate, te, pi, piz, iz, izz, zz, zza, za
특징: it, at, on, at 제거
4ms

 

5.      Edge ngram

텀 앞쪽의 ngram만 저장하기 위한 토크나이저

Filter Result 분석 속도
lowercase it, my, pr, pre, ha, hat, ye, yel, 20, 12, 15, on, sa, sal, at, ate, pi, piz 4ms
1.lowercase
2.Stemmer
it, my, pr, pre, ha, hat, ye, yel, 20, 12, 15, on, sa, sal, at, at, pi, piz
특징: ate -> at
4ms
1.lowercase
2.stop
my, pr, pre, ha, hat, ye, yel, 20, 12, 15, sa, sal, ate, pi, piz
특징: it, at, on, at 제거
3ms

 

 

6.      Keyword

텍스트를 하나의 토큰으로 만듦.

Filter Result 분석 속도
- It's my PReTty.hat_Yellow! $20.12 15.5% on sale. i ate pizza 4ms
lowercase it's my pretty.hat_yellow! $20.12 15.5% on sale. i ate pizza 3ms
Stemmer It's my PReTty.hat_Yellow! $20.12 15.5% on sale. i ate pizza 4ms
1.lowercase
2.stop
it's my pretty.hat_yellow! $20.12 15.5% on sale. i ate pizza 4ms

 

 

분석 문장: <p>Nice to Meet you~ &gt;&lt; ♥hahaha♥</p>

 

** Tokenizer로 분류

 

1.      Standard

공백으로 텀을 구분하면서 일부 특수문자 제거

전체 적용: char_filter: html_strip

Filter Result 분석 속도
html_strip Nice, to, Meet, you, ♥, hahaha, ♥ 4ms
lowercase nice, to, meet, you, ♥, hahaha, ♥
 
4ms
Stemmer Nice, to, Meet, you, ♥, hahaha, ♥ 4ms
1.lowercase
2.stop
nice, meet, you, ♥, hahaha, ♥
특징: 기본 불용어 “to” 제거. Elastic에서 기본적으로 제공하는 영어 불용어는 소문자이기 때문에 lowercase filter를 거쳐야 한다.
4ms

 

 

2.      Letter

알파벳을 제외한 모든 공백, 숫자, 기호들을 기준으로 텀을 분리

Filter Result 분석 속도
- Nice, to, Meet, you~, ><, ♥hahaha♥ 4ms
lowercase nice, to, meet, you~, ><, ♥hahaha♥ 4ms
Stemmer Nice, to, Meet, you~, ><, ♥hahaha♥ 4ms
1.lowercase
2.stop
nice, meet, you, hahaha 3ms

 

 

3.      Whitespace

스페이스, , 줄바꿈 같은 공백만을 기준으로 텀을 분리

Filter Result 분석 속도
- Nice, to, Meet, you~, ><, ♥hahaha♥ 4ms
lowercase nice, to, meet, you~, ><, ♥hahaha♥ 3ms
Stemmer Nice, to, Meet, you~, ><, ♥hahaha♥ 4ms
1.lowercase
2.stop
nice, meet, you~, ><, ♥hahaha♥ 3ms

 

4.      Ngram

N글자씩 토큰화 하는 필터

적용한 옵션:       "tokenizer": {

        "type": "ngram",

        "min_gram": 2,

        "max_gram": 3,

        "token_chars": [

            "letter",

            "digit"

        ]

  },

Filter Result 분석 속도
lowercase ni, nic, ic, ice, ce, to, me, mee, ee, eet, et, yo, you, ou, ha, hah, ah, aha, ha, hah, ah, aha, ha 4ms
1.lowercase
2.Stemmer
lowercase와 동일 3ms
1.lowercase
2.stop
ni, nic, ic, ice, ce, me, mee, ee, eet, et, yo, you, ou, ha, hah, ah, aha, ha, hah, ah, aha, ha
특징: to 제거
4ms

 

7.      Edge ngram

텀 앞쪽의 ngram만 저장하기 위한 토크나이저

Filter Result 분석 속도
lowercase ni, nic, to, me, mee, yo, you, ha, hah 4ms
1.lowercase
2.Stemmer
ni, nic, to, me, mee, yo, you, ha, hah 4ms
1.lowercase
2.stop
ni, nic, me, mee, yo, you, ha, hah
특징: to 제거
4ms

 

 

 

색인과 검색 시 분석기를 따로 설정하기

 

example1 인덱스 색인

-        lower_test_analyzer

-        stop_test_analyzer

-        edgeNGram_test_analyzer

 

"analyzer":"stop_test_analyzer",

"search_analyzer": "lower_test_analyzer"

 

** text: <p>Nice to Meet you~ &gt;&lt; ♥hahaha♥</p>

색인 수행 시: nice ,meet, you, ♥, hahaha, ♥

-> “to” 라는 불용어가 제거되는 것을 볼 수 있음

 

 

 

Comments