Elasticsearch - Phân tích
Khi một truy vấn được xử lý trong một hoạt động tìm kiếm, nội dung trong bất kỳ chỉ mục nào sẽ được phân tích bởi mô-đun phân tích. Mô-đun này bao gồm bộ phân tích, bộ tách sóng, bộ lọc mã thông báo và bộ lọc bộ lọc. Nếu không có bộ phân tích nào được xác định, thì theo mặc định, bộ phân tích, mã thông báo, bộ lọc và bộ phân tích tích hợp sẽ được đăng ký với mô-đun phân tích.
Trong ví dụ sau, chúng tôi sử dụng máy phân tích tiêu chuẩn được sử dụng khi không có máy phân tích nào khác được chỉ định. Nó sẽ phân tích câu dựa trên ngữ pháp và đưa ra các từ được sử dụng trong câu.
POST _analyze
{
"analyzer": "standard",
"text": "Today's weather is beautiful"
}
Khi chạy đoạn mã trên, chúng tôi nhận được phản hồi như hình dưới đây:
{
"tokens" : [
{
"token" : "today's",
"start_offset" : 0,
"end_offset" : 7,
"type" : "",
"position" : 0
},
{
"token" : "weather",
"start_offset" : 8,
"end_offset" : 15,
"type" : "",
"position" : 1
},
{
"token" : "is",
"start_offset" : 16,
"end_offset" : 18,
"type" : "",
"position" : 2
},
{
"token" : "beautiful",
"start_offset" : 19,
"end_offset" : 28,
"type" : "",
"position" : 3
}
]
}
Cấu hình máy phân tích chuẩn
Chúng tôi có thể định cấu hình bộ phân tích tiêu chuẩn với các thông số khác nhau để nhận được các yêu cầu tùy chỉnh của chúng tôi.
Trong ví dụ sau, chúng tôi định cấu hình trình phân tích tiêu chuẩn để có max_token_length là 5.
Đối với điều này, trước tiên chúng tôi tạo một chỉ mục với trình phân tích có tham số max_length_token.
PUT index_4_analysis
{
"settings": {
"analysis": {
"analyzer": {
"my_english_analyzer": {
"type": "standard",
"max_token_length": 5,
"stopwords": "_english_"
}
}
}
}
}
Tiếp theo, chúng tôi áp dụng bộ phân tích với một văn bản như hình dưới đây. Vui lòng lưu ý cách mã thông báo không xuất hiện vì nó có hai khoảng trắng ở đầu và hai khoảng trắng ở cuối. Đối với từ “là”, có một khoảng trắng ở đầu và một khoảng trắng ở cuối từ. Lấy tất cả chúng, nó trở thành 4 chữ cái có dấu cách và điều đó không biến nó thành một từ. Ít nhất phải có một ký tự nonspace ở đầu hoặc cuối để làm cho nó trở thành một từ được đếm.
POST index_4_analysis/_analyze
{
"analyzer": "my_english_analyzer",
"text": "Today's weather is beautiful"
}
Khi chạy đoạn mã trên, chúng tôi nhận được phản hồi như hình dưới đây:
{
"tokens" : [
{
"token" : "today",
"start_offset" : 0,
"end_offset" : 5,
"type" : "",
"position" : 0
},
{
"token" : "s",
"start_offset" : 6,
"end_offset" : 7,
"type" : "",
"position" : 1
},
{
"token" : "weath",
"start_offset" : 8,
"end_offset" : 13,
"type" : "",
"position" : 2
},
{
"token" : "er",
"start_offset" : 13,
"end_offset" : 15,
"type" : "",
"position" : 3
},
{
"token" : "beaut",
"start_offset" : 19,
"end_offset" : 24,
"type" : "",
"position" : 5
},
{
"token" : "iful",
"start_offset" : 24,
"end_offset" : 28,
"type" : "",
"position" : 6
}
]
}
Danh sách các máy phân tích khác nhau và mô tả của chúng được đưa ra trong bảng dưới đây:
S. không | Trình phân tích & Mô tả |
---|---|
1 | Standard analyzer (standard) stopwords và cài đặt max_token_length có thể được đặt cho máy phân tích này. Theo mặc định, danh sách từ dừng trống và max_token_length là 255. |
2 | Simple analyzer (simple) Máy phân tích này được cấu tạo bởi tokenizer chữ thường. |
3 | Whitespace analyzer (whitespace) Bộ phân tích này bao gồm bộ tách khoảng trắng. |
4 | Stop analyzer (stop) stopwords và stopwords_path có thể được định cấu hình. Theo mặc định, các từ dừng được khởi tạo thành các từ dừng tiếng Anh và stopwords_path chứa đường dẫn đến tệp văn bản có các từ dừng. |
Tokenizers
Tokenizers được sử dụng để tạo mã thông báo từ một văn bản trong Elasticsearch. Văn bản có thể được chia thành các mã thông báo bằng cách tính đến khoảng trắng hoặc các dấu câu khác. Elasticsearch có rất nhiều công cụ phân tích mã hóa tích hợp, có thể được sử dụng trong bộ phân tích tùy chỉnh.
Dưới đây là một ví dụ về tokenizer ngắt 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à chữ cái, nhưng nó cũng viết thường tất cả các thuật ngữ:
POST _analyze
{
"tokenizer": "lowercase",
"text": "It Was a Beautiful Weather 5 Days ago."
}
Khi chạy đoạn mã trên, chúng tôi nhận được phản hồi như hình dưới đây:
{
"tokens" : [
{
"token" : "it",
"start_offset" : 0,
"end_offset" : 2,
"type" : "word",
"position" : 0
},
{
"token" : "was",
"start_offset" : 3,
"end_offset" : 6,
"type" : "word",
"position" : 1
},
{
"token" : "a",
"start_offset" : 7,
"end_offset" : 8,
"type" : "word",
"position" : 2
},
{
"token" : "beautiful",
"start_offset" : 9,
"end_offset" : 18,
"type" : "word",
"position" : 3
},
{
"token" : "weather",
"start_offset" : 19,
"end_offset" : 26,
"type" : "word",
"position" : 4
},
{
"token" : "days",
"start_offset" : 29,
"end_offset" : 33,
"type" : "word",
"position" : 5
},
{
"token" : "ago",
"start_offset" : 34,
"end_offset" : 37,
"type" : "word",
"position" : 6
}
]
}
Danh sách các Tokenizers và mô tả của chúng được hiển thị ở đây trong bảng dưới đây -
S. không | Tokenizer & Mô tả |
---|---|
1 | Standard tokenizer (standard) Điều này được xây dựng dựa trên tokenizer dựa trên ngữ pháp và max_token_length có thể được định cấu hình cho tokenizer này. |
2 | Edge NGram tokenizer (edgeNGram) Có thể đặt các cài đặt như min_gram, max_gram, token_chars cho tokenizer này. |
3 | Keyword tokenizer (keyword) Điều này tạo ra toàn bộ đầu vào dưới dạng đầu ra và có thể đặt buffer_size cho việc này. |
4 | Letter tokenizer (letter) Thao tác này sẽ ghi lại toàn bộ từ cho đến khi gặp một ký tự không phải chữ cái. |