Elk Stack/Elasticsearch
[Elasticsearch] 텍스트 분석
freedommmm
2021. 8. 6. 18:00
안녕하세요. 오늘은 elasticsearch의 텍스트 분석에 대해서 첫 번째 게시물에서 말씀드렸지만 좀 더 자세히 다뤄보도록 하겠습니다.
엘라스틱서치의 데이터 저장 형태
엘라스틱서치는 역 색인(Inverted Index) 구조로 데이터를 저장합니다. RDBMS와 반대이며 텍스트를 다 뜯어서 검색어 사전을 만들어서 테이블 형태로 저장한다고 생각하면 쉽습니다. 이러한 방식을 사용하기 때문에, 데이터 검색 속도가 빠릅니다.
Elasticsearch는 Text Analysis 과정을 통해서 규칙이 있습니다.
- 대문자 소문자 검색 없이 진행돼야 하기 때문에 모든 영어는 소문자로 만듭니다.
- Dogs, DOG 등을 dog로 통일시켜서 데이터 사전에 저장됩니다.
- 문장에서 불필요한 단어를 제거하고, Token으로 만들어줍니다.
Token(Term) | Doc | Token(Term) | Doc |
car | 1,3 | walk | 2 |
dog | 1 | house | 1, 4 |
엘라스틱서치는 위와 같이 데이터를 저장하기 텍스트 분석과정을 거치며 이러한 과정을 애널라이저(Analyzer)라고 불립니다. 해당 과정은 3개의 큰 단계를 거칩니다.
3 단계를 세부적으로 살펴보겠습니다.
1. 캐릭터 필터
- 0~3개의 캐릭터 필터로 이뤄집니다.
- 데이터가 입력되었을 때 가장 먼저 만나는 단계이며 일종의 전처리 단계입니다.
1_1 캐릭터 필터 예시
- html_strip : 저장된 값에 html 태그들을 제거하여 일반 텍스트로 만듭니다.
- mapping : 지정한 단어를 다른 단어로 치환이 가능합니다. 토크 나이저에 의해서 특수문자가 사라질 것을 대비해 다른 문자로 대체할 수 있다.
2. 토크나이저
- 반드시 1개의 유일한 토크나이저로 이뤄집니다.
- 검색 기능에서 가장 큰 영향을 미칩니다.
- 문장에 속한 단어들을 위의 표처럼 token으로 분리할 때 어떠한 규칙으로 분리할지 결정할 수 있습니다.
- 토크나이저의 기본은 Standard입니다.
2_1 토크나이저 예시
- Standard : 빈칸을 기준으로 텀을 구분하며, 특수문자를 자동으로 제거하지만, 단어 중간에 있는 특수문자는 제거 안 합니다.
- Letter : 문자를 제외한 모든 단어를 기준으로 토큰을 분리합니다.
- Whitespace : 빈칸 및 줄 바꿈 같은 공백을 기준으로 텀을 분리합니다. Standard 토크나이저와 다르게 특수문자도 사라지지 않습니다.
- uax_url_email : Standard 토크나이저에서는 특수문자를 제거하기 전, 이메일에서도 특수문자가 삭제되어 정상적으로 인식이 안 되는 것을 방지하기 위해서 사용된 토크나이저입니다.
- Pattern : 공백이 아닌 구분자로 구분하기 위해서 사용하는 토크나이저 입니다.
3. 토큰 필터
- 0 ~ n개의 토큰 필터를 텍스트에 적용할 수 있습니다.
- 토크나이저를 통해서 분리된 토큰들을 추가적인 제약조건을 통해서 가공하는 과정입니다.
- 배열 값으로 저장 후 사용해야 합니다.
3_1 토큰 필터 예시
- Lowercase : 토큰에 있는 모든 단어를 소문자로 만드는 것입니다.
- Uppercase : 토큰에 있는 모든 단어를 대문자로 만드는 것입니다.
- Stop : 불필요하게 저장되어 있는 term들을 저장함으로써 속도 향상을 낼 수 있습니다.