Elasticsearch Analyzer & Normalizer

I. Kiểu dữ liệu “text” và “keyword”
Khi làm việc với Elasticsearch, chúng ta đã quen thuộc với 2 nhóm kiểu dữ liệu text
và keyword
.
text
: Kiểu dữ liệu full-text content, thường là nội dung của các email hoặc các description mô tả sản phẩm. Kiểu dữ liệu này được analyzed thông qua bộ Analyzer thành các individual terms và đưa vào inverted index. Khi tìm kiếm trên trường dữ liệu text, Analyzer cũng phân tích nội dung từ truy vấn thành các individual words và tìm kiếm trên inverted index của trường dữ liệu text.keyword
: Kiểu dữ liệu có cấu trúc, thường là các ID, địa chỉ email, hostname, status code, zip code,… Kiểu dữ liệu này sẽ không được phân tích thành các terms mà sẽ giữ nguyên toàn bộ nội dung để nhằm mục đích truy vấn trong các trường hợp tìm kiếm chính xác giá trị. Khi được đưa vào index của Elasticsearch, các trường keyword được xử lý thông qua một bộ Normalizer.
II. Analyzer và Normalizer
Analyzer và Normalizer đều có nhiệm vụ là xử lý data trước khi đưa vào các index và inverted index. Tuy nhiên, Analyzer làm việc trên text
field còn Normalizer làm việc trên keyword
field.
Các thành phần của Analyzer
Analyzer gồm 3 thành phần: Character filter, Tokenizer, Token filter.
Character filter: Thêm, xóa, sửa nội dung text đầu vào. Ví dụ như bỏ qua các ký tự html <b> <div>,..
Tokenizer: Tách nội dung text thành các token (individual terms)
Token filter: Thêm, xóa, sửa các token sau khi được tách. Ví dụ như lowercase, loại bỏ stopword (các từ không có ý nghĩa như a, an, the, and, to, is ,…), thêm các từ đồng nghĩa synonyms, hoặc stemming (lấy từ gốc reading → read, confirmed → confirm,…)Các thành phần của Normalizer
Normalizer khác với Analyzer khi chỉ gồm 2 thành phần là Character filter, Token filter, không có Tokenizer vì Normalizer chỉ xuất ra một token duy nhất chứ không split thành nhiều token như Analyzer.
Lưu ý, Token filter mà Normalizer sử dụng cũng giới hạn chứ không phải toàn bộ các token filter mà Analyzer có thể dùng vì mục đích là giữ nguyên nội dung đầu vào. Các Token filter có thể dùng gồm:
lowercase
: chuyển chữ hoa sang chữ thường
uppercase
: chuyển chữ thường sang chữ hoa
asciifolding
: chuyển các ký tự có dấu sang ASCII ( é → e)trim
: loại bỏ các dấu space đầu cuối
Mặc định, nếu không định nghĩa thì Elasticsearch sử dụng Analyzer là standard
(Character filter: không có, Tokenizer: standard, Token filter: lowercase, stop), còn Normalizer thì không sử dụng trừ khi định nghĩa custom normalizer.
III. Tổng kết
Analyzer | Normalizer | |
Kiểu dữ liệu | Text | Keyword |
Thành phần | Character filter, Tokenizer, Token filter | Character filter, |
Mặc định | standard analyzer(Character filter: không dùng, Tokenizer: standard, Token filter: lowercase, stop) | Không dùng |
Số lượng token output | Nhiều token | 1 token |
Giới hạn token filter | Không | Giới hạn dùng các token filter để tránh làm thay đổi nội dung gốc |
Subscribe to my newsletter
Read articles from littlenotes directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
