Token, Tokenizing
- Tokenizing: 문서(document)에 포함된 텍스트를 특정 기준(예시에선 공백)으로 나누는 것을 말한다.
- Token(또는 Term): 토크나이징에 의해 나눠진 문자열 덩어리 하나를 토큰(또는 Term)이라고 부른다.
Inverted Index
위의 설명에서 1번 문서(Document 1)에 포함된 "Hello I am yelly"를 토크나이징한 결과가 "Hello", "I", "am", "yelly"라는 토큰으로 분리되었다. 마찬가지로 2번 문서(Document 2)에 포함된 "Hello You are jelly" "Hello", "You", "are", "jelly"라는 토큰으로 분리되었다.
색인
이때 토큰과 문서 정보(Document ID)를 매핑해서 저장한 자료구조를 `Inverted Index(역 인덱스)`라 한다.
ElasticSearch에서 사용하는 자료구조는 Trie(트라이)를 변형한 FST, Burst Trie를 사용하는데, 자세한 내용은 다음 포스팅에서 다룬다.
검색
"Hello"라는 단어(term)를 Inverted Index에 검색하면 토큰이 정확하게 일치하는 문서의 번호인 1, 2를 얻는다.
"hello"라는 단어로 검색 시 소문자와 대문자는 다르므로 "hello"라는 단어가 포함된 문서는 없다는 결과를 얻는다.
Analyzer
ElasticSearch에서 Inverted Index를 만드는 주체는 Analyzer 이다.
인덱스 색인 시 어떤 Analyzer를 선택했냐에 따라 Inverted Index의 구조는 달라진다.
Standard Analyzer
Standard Analyzer는 `character filter`를 사용하지 않고, `stop token filter`는 기본적으로 비활성화되어 있어 점선으로 표시했다.
처리 순서
- standard analyzer에서 `character filter`는 정의되지 않았다.
이 필터는 `<`, `>`, `!`같은 무의미한 특수문자를 제거하는 역할을 한다. - 인덱스에 인입된 문자열을 순서대로 `standard tokenizer`에 의해 가공한다.
특정한 기준(공백 또는 쉼표 등)에 의해 문자열을 나눠 n개의 토큰을 생성한다. - 토큰들은 `standard token filter`에 의해 `unicode standard annex`라는 규칙에 따라 문자열을 분리한다.
(이 규칙은 영어가 아닌 한글같은 문자열을 어떻게 표현할 것인지를 정의한 규칙이다.) - 토큰들은 `lower case token filter`에 의해 모두 소문자로 변환된다.
- `stop token filter`는 stop word로 지정한 단어가 토큰에 포함되었을 때 해당 토큰을 제거한다. 기본적으로 비활성화 되어있다.
- 최종적으로 필터를 모두 거친 토큰들은 Inverted Index를 구성하게 된다.
Keyword Analyzer
Keyword Analyzer는 인입된 문자열을 변형시키지 않는다.
필드의 값을 그대로 Inverted Index로 저장한다.
따라서 "Hello" 라는 단어로 검색하면 정확히 일치하는 토큰이 없기 때문에 아무 결과를 얻지 못한다.
다음 포스팅에서 ElasticSearch가 사용하는 루씬(Lucene) 검색 엔진의 구조를 다루고, 대용량 텍스트를 어떻게 빨리 검색할 수 있는지 설명한다.
2025.01.12 - [ElasticSearch] - 루씬(Lucene) 검색 엔진의 구조 (FST, Burst Trie, 역 인덱스)
참고
- 기초부터 다지는 ElasticSearch 운영 노하우
- https://opster.com/guides/elasticsearch/data-architecture/elasticsearch-text-analyzers/
'ElasticSearch' 카테고리의 다른 글
루씬(Lucene) 검색 엔진의 구조 (FST, Burst Trie, 역 인덱스) (0) | 2025.01.12 |
---|---|
ElasticSearch Cluester API & Index API - 클러스터 설정과 인덱스 설정 변경하기 (0) | 2025.01.10 |
ElasticSearch 샤드 배치 방식 변경하기 (0) | 2025.01.03 |
ElasticSearch 클러스터 설정 톺아보기 (0) | 2024.12.30 |
ElasticSearch 기본 개념 (0) | 2024.12.29 |