본 포스팅은 2024년 04월 01일을 기준으로 작성되었습니다.
Elasticsearch는 전문 검색(full-text search)을 수행하기 위해 텍스트를 토큰으로 가공하는 텍스트 분석(Text Analysis) 과정을 거칩니다. 이 과정을 처리하는 분석기를 애널라이저(Analyzer) 라고 하며, 애널라이저는 0~3개의 Character filter, 1개의 Tokenizer, 0~n개의 Token filter로 이루어집니다.
위의 사진에서는 예시로 "<b>Best Beaches for Summer<b>" 과 같은 HTML 태그가 포함된 문장이 있습니다. 이 문장이 Analyzer의 Character filter, Tokenizer, Token Filter를 거치면서 최종적으로 3개의 토큰으로 가공 된 것을 볼 수 있습니다.
Elasticsearch에서는 모든 인덱스에서 광범위하게 사용할 수 있는 기본 제공 Analyzer들이 있습니다.
Character filter는 텍스트 분석에서 가장 먼저 처리되는 과정입니다. 텍스트를 Tokenizer에 넘겨 토큰화 하기 전에 전체 문장을 전처리 합니다. 위 그림은 HTML 태그를 제거해주는 HTML strip Character filter가 텍스트에 적용된 예시입니다.
Character filter는 0~3개 로 구성할 수 있으며, 종류는 다음과 같습니다.
Pattern replace
Mapping
HTML strip
Tokenizer는 텍스트를 개별 적인 토큰들로 분리 해주는 토큰화 도구입니다. 위의 그림은 공백을 기준으로 토큰을 분리해주는 whitespace Tokenizer가 적용되어 4개의 토큰으로 분리된 예시입니다.
Tokenizer는 Analyzer를 만들 때 반드시 필요하며 한 개만 사용이 가능합니다.
Token filter는 Tokenizer에서 분리된 토큰들을 지정한 규칙에 맞게 수정, 삭제, 추가 해주는 과정입니다. 위의 그림은 대문자를 소문자로 변환해주는 lowercase filter, 검색에 불필요한 불용어(a, an, at, the, for, i, by...)를 삭제해주는 stop filter 를 적용하여 최종적으로 3개의 토큰만 남은 예시입니다.
Token filter는 0~n개로 구성할 수 있으며, 입력된 순서대로 처리되기 때문에 순서를 잘 고려해야 합니다.
Elasticsearch에서 한글을 지원하긴 하지만, 기본 analyzer로는 한글 형태소 분석을 하기에는 어려움이 있습니다. 이를 위해 elastic 사에서 공식적으로 Nori(노리) 라고 하는 한글 형태소 분석기를 공식적으로 개발해서 지원하고 있습니다.
자세한 설명은 Nori 한글 형태소 분석 에서 볼 수 있습니다.