Bài toán elasticsearch update lại từ điển đồng nghĩa
Trong Elasticsearch, khi cập nhật từ điển đồng nghĩa (synonyms
), bạn cần làm mới lại phân tích cú pháp (analyzer
), điều này yêu cầu cập nhật lại index settings hoặc reindexing dữ liệu. Dưới đây là các cách tiếp cận:
1. Sử dụng "reload search analyzers" (Elasticsearch 7.3+)
Nếu bạn 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 reindex.
Bước 1: Cấu hình synonyms file
Cấu hình synonym_path
trong Elasticsearch settings:
{
"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 admin thêm từ đồng nghĩa, cập nhật file synonyms.txt
:
iphone, apple phone
laptop, notebook
Bước 3: Reload analyzer mà không cần reindex
Chạy API sau:
POST /my_index/_reload_search_analyzers
Elasticsearch sẽ cập nhật từ điển mới mà không ảnh hưởng đến dữ liệu.
2. Cập nhật inline synonyms (Cần reindex)
Nếu bạn không muốn dùng file, bạn có thể cập nhật synonyms trực tiếp trong index settings nhưng cần reindex.
Bước 1: Cập nhật settings
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 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à copy dữ liệu từ index cũ:
POST _reindex
{
"source": { "index": "my_index" },
"dest": { "index": "my_index_v2" }
}
Sau đó, chuyển alias từ index cũ sang index mới.
3. Dùng Alias để tránh downtime
Bạn có thể dùng index alias để tránh downtime khi cập nhật từ điển.
Bước 1: Tạo alias cho index
POST _aliases
{
"actions": [
{ "add": { "index": "my_index_v2", "alias": "my_index" } }
]
}
Bước 2: Reindex dữ liệu vào index mới
- Khi admin cập nhật từ điển, bạn tạo một index mới
my_index_v2
với cấu hình mới. - Dùng
_reindex
để chuyển dữ liệu. - Sau đó, cập nhật alias
my_index
trỏ sangmy_index_v2
, tránh downtime.
Tóm tắt 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 → Dùng
_reload_search_analyzers
(Cách 1). - Nếu cần thay đổi nhanh nhưng chấp nhận downtime → Inline synonyms + Reindex (Cách 2).
- Nếu yêu cầu uptime cao → Dùng Alias + Reindex (Cách 3).
Bạn đang dùng version Elasticsearch nào? Mình có thể giúp tối ưu cách làm cho phù hợp. 🚀
All rights reserved