Cách Cập Nhật Từ Điển Đồng Nghĩa Trong Elasticsearch: Hướng Dẫn Chi Tiết
Giới thiệu
Elasticsearch là một công cụ tìm kiếm và phân tích mạnh mẽ, cho phép người dùng tối ưu hóa tìm kiếm thông qua việc sử dụng từ điển đồng nghĩa. Khi bạn cần cập nhật từ điển đồng nghĩa (synonyms
), quan trọng là bạn phải làm mới phân tích cú pháp (analyzer
). Điều này có thể đòi hỏi việc cập nhật lại index settings hoặc thực hiện reindexing dữ liệu.
Phương Pháp Cập Nhật Từ Điển Đồng Nghĩa
Dưới đây là ba phương pháp chính để cập nhật từ điển đồng nghĩa trong Elasticsearch:
1. Sử Dụng Tính Năng "Reload Search Analyzers" (Elasticsearch 7.3+)
Nếu bạn đang sử dụng synonym file thay vì inline synonyms, bạn có thể cập nhật từ điển mà không cần thực hiện reindex.
Bước 1: Cấu Hình Synonyms File
Cấu hình synonym_path
trong Elasticsearch settings như sau:
json
{
"settings": {
"analysis": {
"filter": {
"synonym_filter": {
"type": "synonym",
"synonyms_path": "analysis/synonyms.txt"
}
},
"analyzer": {
"synonym_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": ["lowercase", "synonym_filter"]
}
}
}
}
}
Bước 2: Cập Nhật synonyms.txt
Khi bạn muốn thêm từ đồng nghĩa mới, chỉ cần cập nhật file synonyms.txt
với nội dung mới:
text
iphone, apple phone
laptop, notebook
Bước 3: Reload Analyzer Mà Không Cần Reindex
Chạy API sau để cập nhật từ điển:
json
POST /my_index/_reload_search_analyzers
Elasticsearch sẽ tự động cập nhật từ điển mà không làm ảnh hưởng đến dữ liệu hiện tại.
2. Cập Nhật Inline Synonyms (Cần Reindex)
Nếu bạn muốn cập nhật synonyms trực tiếp trong index settings, bạn sẽ cần thực hiện reindex.
Bước 1: Cập Nhật Settings
Cập nhật index settings như sau:
json
PUT /my_index/_settings
{
"analysis": {
"filter": {
"synonym_filter": {
"type": "synonym",
"synonyms": [
"iphone, apple phone",
"laptop, notebook"
]
}
}
}
}
Lưu ý: Nếu index đang hoạt động, thay đổi này sẽ không có hiệu lực ngay lập tức.
Bước 2: Reindex Lại Dữ Liệu
Tạo index mới và sao chép dữ liệu từ index cũ:
json
POST _reindex
{
"source": { "index": "my_index" },
"dest": { "index": "my_index_v2" }
}
Sau đó, bạn có thể chuyển alias từ index cũ sang index mới để đảm bảo dữ liệu được cập nhật chính xác.
3. Sử Dụng Alias Để Tránh Downtime
Việc sử dụng index alias giúp bạn tránh downtime khi cập nhật từ điển.
Bước 1: Tạo Alias Cho Index
Tạo alias cho index như sau:
json
POST _aliases
{
"actions": [
{ "add": { "index": "my_index_v2", "alias": "my_index" } }
]
}
Bước 2: Reindex Dữ Liệu Vào Index Mới
Khi bạn cập nhật từ điển, bạn sẽ tạo một index mới my_index_v2
với cấu hình mới và sử dụng _reindex
để chuyển dữ liệu trước khi cập nhật alias my_index
trỏ sang my_index_v2
. Điều này giúp bạn giảm thiểu downtime.
Tóm Tắt Các Cách Tiếp Cận
Cách | Cần Reindex? | Có Downtime? | Dễ Triển Khai? |
---|---|---|---|
Reload search analyzers (synonym file) | ❌ Không | ❌ Không | ✅ Dễ |
Inline synonyms update | ✅ Có | ✅ Có | ⚠️ Trung bình |
Alias + Reindex | ✅ Có | ❌ Không | 🔥 Tốt nhất cho production |
Khuyến Nghị
- Nếu có thể dùng synonym file → Hãy sử dụng
_reload_search_analyzers
(Cách 1). - Nếu cần thay đổi nhanh nhưng chấp nhận downtime → Sử dụng inline synonyms + Reindex (Cách 2).
- Nếu yêu cầu uptime cao → Hãy áp dụng Alias + Reindex (Cách 3).
Bạn đang sử dụng phiên bản Elasticsearch nào? Hãy để lại câu hỏi và mình có thể giúp bạn tối ưu hóa cách làm sao cho phù hợp nhất. 🚀
source: viblo