0
0
Lập trình
Sơn Tùng Lê
Sơn Tùng Lê103931498422911686980

Cách Cập Nhật Từ Điển Đồng Nghĩa Trong Elasticsearch: Hướng Dẫn Chi Tiết

Đăng vào 3 tháng trước

• 3 phút đọc

Chủ đề:

Elasticsearch

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 Copy
{
  "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 Copy
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 Copy
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 Copy
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 Copy
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 Copy
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

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào