Tìm hiểu Tokenizers phổ biến trong Elasticsearch
Bài đăng này đã không được cập nhật trong 7 năm
Tokenizers
- 1 Tokenizers nhận được thường là một mảng các từ riêng lẻ xuất rả từ một chuỗi ký tự tìm kiếm
- Ví dụ
whitespace tokenizer
chia đoạn văn bản bởi các khoảng trắng. Ví dụ với chuỗiquick brown fox
sử dụngwhitespace tokenizer
sẽ chia thành các thuật ngữ[quick, brown, fox]
Elasticsearch
định nghĩa sẵn một sốTokenizers
, ngoài ra có thể xây dựng 1Tokenizers
mới dựa trêncustom analyzers
. Chúng ta sẽ tìm hiểu vềCustom Analyzers
ở bài viết sau.
Word Oriented Tokenizers
Các tokenizers sau đây thường được sử dụng để tokenizing văn bản đầy đủ thành các từ riêng lẻ:
Standard Tokenizers
Standard Tokenizers
chia văn bản thành các thuật ngữ về ranh giới từ, như được xác định bởi thuật toánUnicode Text Segmentation
. Nó loại bỏ hầu hết các dấu chấm câu. Đây là sự lựa chọn tốt nhất cho hầu hết các ngôn ngữ.
Example output
POST _analyze
{
"tokenizer": "standard",
"text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}
Các viết ở trên sẽ tạo ra các terms
sau:
[The, 2, QUICK, Brown, Foxes, jumped, over, the, lazy, dog's, bone]
Configuration
Standard Tokenizers
nhận tham số:
max_token_length
Mặc định giá trị này bằng 255
chúng ta có thể chỉnh để nhận đầu ra tối đa của 1 terms:
Ví dụ
PUT my_index
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "my_tokenizer"
}
},
"tokenizer": {
"my_tokenizer": {
"type": "standard",
"max_token_length": 5
}
}
}
}
}
POST my_index/_analyze
{
"analyzer": "my_analyzer",
"text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}
Đầu ra nhận được là:
[ The, 2, QUICK, Brown, Foxes, jumpe, d, over, the, lazy, dog's, bone]
Letter Tokenizers
Các tokenizer thư chia văn bản thành các thuật ngữ bất cứ khi nào nó gặp một ký tự không phải là 1 letter
.
Example output
{
"tokenizer": "letter",
"text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}
Đầu ra nhận được sẽ là:
[ The, QUICK, Brown, Foxes, jumped, over, the, lazy, dog, s, bone ]
Lowercase Tokenizers
Lowercase Tokenizers
giống như letter tokenizers
, chia văn bản thành các thuật ngữ bất cứ khi nào nó chạm trán một ký tự không phải là một letter
, nhưng nó cũng chuyển thành dạng lowercase
tất cả các thuật ngữ.
Example Output
POST _analyze
{
"tokenizer": "lowercase",
"text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}
Đầu ra nhận được là:
[ the, quick, brown, foxes, jumped, over, the, lazy, dog, s, bone ]
Whitespace Tokenizers
whitespace tokenizers
phá vỡ văn bản bất cứ khi nào nó gặp 1 ký tự khoảng trắng
Example Output
POST _analyze
{
"tokenizer": "whitespace",
"text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}
Đầu ra nhận được là:
[ The, 2, QUICK, Brown-Foxes, jumped, over, the, lazy, dog's, bone. ]
UAX URL Email Tokenizers
UAX URL Email Tokenizers
giống như Standard tokenizer
ngoại trừ việc nó nhận ra URL và địa chỉ email dưới dạng các mã đơn.
Example Output
POST _analyze
{
"tokenizer": "uax_url_email",
"text": "Email me at john.smith@global-international.com"
}
Đối với Standard Tokenizers
đầu ra nhận được sẽ là:
[ Email, me, at, john.smith, global, international.com ]
Còn đối với UAX URL Email Tokenizers
đầu ra nhận được là:
[ Email, me, at, john.smith@global-international.com ]
Classic Tokenizers
Classic Tokenizers
là một tokenizer dựa trên ngữ pháp tiếng anh, rất tốt cho các tài liệu tiếng Anh. Tokkenizer này có heuristics
để xử lý đặc biệt của từ viết tắt, tên công ty, địa chỉ email, và tên máy chủ lưu trữ internet. Tuy nhiên, những quy tắc này không phải lúc nào cũng hiệu quả, và tokenizer không hoạt động tốt với hầu hết các ngôn ngữ khác ngoài tiếng Anh:
- Nó phân chia các từ thành nhiều ký tự chấm câu, loại bỏ dấu chấm câu. Tuy nhiên, một chấm không theo sau bởi khoảng trắng được coi là một phần của một mã thông báo.
- Nó chia tách các từ thành các dấu nối, trừ khi có một số trong mã thông báo, trong trường hợp toàn bộ mã thông báo được hiểu là số sản phẩm và không bị chia tách.
- Nó nhận ra địa chỉ email và tên máy chủ internet là một mã thông báo.
Example Output
POST _analyze
{
"tokenizer": "classic",
"text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}
Đầu ra nhận được là:
[ The, 2, QUICK, Brown, Foxes, jumped, over, the, lazy, dog's, bone ]
Configuration
Tương tự như Standard Tokenizers
cũng có tham số: max_token_length
Partial Word Tokenizers
Những mã token này chia nhỏ văn bản hoặc các từ thành các đoạn nhỏ.
N-Gram Tokenizers
N-Gram Tokenizers
phá vỡ văn bản thành các từ bất cứ khi nào nó chạm trán một trong những ký tự được chỉ định, sau đó nó phát ra N-gram của mỗi từ có độ dài quy định.
N-Gram giống như một cửa sổ trượt di chuyển qua từ - một dãy liên tục các ký tự có độ dài quy định. Chúng hữu ích cho việc truy vấn các ngôn ngữ không sử dụng không gian hoặc có từ ghép dài, chẳng hạn như tiếng Đức.
Example Output
Với cài đặt mặc định, N-Gram tokenizer
xử lý văn bản ban đầu dưới dạng một mã thông báo đơn và tạo ra N-gram với độ dài tối thiểu 1
và chiều dài tối đa 2
:
POST _analyze
{
"tokenizer": "ngram",
"text": "Quick Fox"
}
Đầu ra nhận được là:
[ Q, Qu, u, ui, i, ic, c, ck, k, "k ", " ", " F", F, Fo, o, ox, x ]
Configuration
N-Gram Tokenizers
chấp nhận các tham số sau:
min_gram
: Chiều dài tối thiểu của ký tự trong một gram. Mặc định là 1.max_gram
: Chiều dài tối đa của ký tự trong một gram. Mặc định là 2.token_chars
: Các lớp ký tự nên chứa trong một mã thông báo. Elasticsearch sẽ chia nhỏ các ký tự không thuộc các lớp được chỉ định. Mặc định là [] (giữ tất cả các ký tự).letter
— for examplea, b, ï or 京
digit
— for example3 or 7
whitespace
— for example" " or "\n"
punctuation
— for example! or "
symbol
— for example$ or √
Example configuration
Trong ví dụ này, chúng ta cấu hình ngram tokenizer
để xử lý chữ cái và chữ số như là các token, và grams có chiều dài là 3.
PUT my_index
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "my_tokenizer"
}
},
"tokenizer": {
"my_tokenizer": {
"type": "ngram",
"min_gram": 3,
"max_gram": 3,
"token_chars": [
"letter",
"digit"
]
}
}
}
}
}
POST my_index/_analyze
{
"analyzer": "my_analyzer",
"text": "2 Quick Foxes."
}
Đầu ra nhận được là:
[ Qui, uic, ick, Fox, oxe, xes ]
Edge N-Gram Tokenizers
Edge N-Gram Tokenizers
đầu tiên chia nhỏ văn bản thành các từ bất cứ khi nào nó chạm trán một trong những ký tự được chỉ định, sau đó nó phát ra N-gram của mỗi từ nơi bắt đầu N-gram được neo vào đầu từ.
Edge N-Grams rất hữu ích cho các truy vấn tìm kiếm khi bạn nhập.
Example Output
Với các thiết lập mặc định, Edge N-Gram Tokenizers
xử lý văn bản ban đầu dưới dạng một mã thông báo đơn và tạo ra N-gram với độ dài tối thiểu 1 và chiều dài tối đa 2:
POST _analyze
{
"tokenizer": "edge_ngram",
"text": "Quick Fox"
}
Đầu ra nhận được là:
[ Q, Qu ]
Configuration
Edge N-gram Tokenizers
cũng có những tham số Tương tự như N-Gram Tokenizers
Example Configuration
Trong ví dụ này, chúng ta cấu hình thẻ edge ngram tokenizer
để xử lý các chữ cái và chữ số dưới dạng thẻ, và tạo ra gram với chiều dài tối thiểu 2 và chiều dài tối đa 10:
PUT my_index
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "my_tokenizer"
}
},
"tokenizer": {
"my_tokenizer": {
"type": "edge_ngram",
"min_gram": 2,
"max_gram": 10,
"token_chars": [
"letter",
"digit"
]
}
}
}
}
}
POST my_index/_analyze
{
"analyzer": "my_analyzer",
"text": "2 Quick Foxes."
}
Đầu ra nhận được sẽ là:
[ Qu, Qui, Quic, Quick, Fo, Fox, Foxe, Foxes ]
Như vậy là chúng ta đã tìm hiểu kỹ hơn về các tokenizer của elasticsearch giúp cho việc cấu hình tìm kiếm được chính xác hơn. Trong bài viết tới tôi sẽ đề cập đến custom analyzer
để cho bạn có thể cấu hình tìm kiếm máy tìm kiếm của mình theo cách của riêng bạn> Mong rằng bài viết giúp các bạn hiểu hơn về elasticsearch
Nguồn: Analysis-tokenizers
All rights reserved