Elasticsearch Bài học 3: Tương tác với Cluster qua RESTful API và giao diện Kibana Dev Tools
Sau khi đã dựng xong cụm Elasticsearch và Kibana ở Bài 2, bạn đang có trong tay một "động cơ" sẵn sàng hoạt động. Nhưng làm thế nào để giao tiếp với nó?
Khác với MySQL hay PostgreSQL sử dụng giao thức kết nối riêng và ngôn ngữ truy vấn SQL, Elasticsearch chọn một hướng đi phổ quát hơn: Giao tiếp 100% qua RESTful API. Bất kể bạn đang dùng PHP, Golang, hay Node.js, miễn là hệ thống của bạn có thể gửi các HTTP Request (GET, POST, PUT, DELETE) kèm payload JSON, bạn đều có thể làm việc với Elasticsearch.
1. Giải phẫu một Request trong Elasticsearch
Cấu trúc tương tác với Elasticsearch tuân thủ nghiêm ngặt tiêu chuẩn REST. Một request cơ bản bao gồm 3 thành phần:
-
HTTP Verb (Phương thức):
-
GET: Lấy thông tin (tìm kiếm, xem cấu hình). -
POST: Tạo mới có tính toán, hoặc thực thi câu query phức tạp. -
PUT: Tạo mới (với ID tự định nghĩa) hoặc cập nhật dữ liệu. -
DELETE: Xóa tài nguyên (Document, Index).
-
-
Endpoint (Đường dẫn): Thường tuân theo cấu trúc
/{index_name}/{api_type}. -
JSON Body: Nội dung dữ liệu hoặc câu lệnh truy vấn (Query DSL).
Ví dụ chuẩn qua cURL (cách mà tài liệu chính thức của Elastic hay viết):
Bash
curl -X GET "localhost:9200/products/_search" -H 'Content-Type: application/json' -d'
{
"query": {
"match_all": {}
}
}
'
2. Tại sao nên dùng Kibana Dev Tools thay vì Postman?
Với tư cách là một Backend Developer, Postman chắc chắn là vật bất ly thân của bạn. Nhưng khi làm việc với Elasticsearch, Kibana Dev Tools lại vượt trội hơn hẳn vì những lý do sau:
-
Tự động hoàn thành (Autocomplete) siêu việt: Dev Tools "hiểu" cấu trúc cụm Elasticsearch của bạn. Khi bạn gõ
GET /pro..., nó sẽ tự động gợi ý tên indexproducts. Nó cũng gợi ý chính xác từng keyword trong cú pháp Query DSL. -
Không cần setup Header/Auth: Nó kế thừa luôn kết nối từ Kibana sang Elasticsearch.
-
Chuyển đổi cURL tự động: Bạn có thể copy nguyên đoạn mã
curltừ tài liệu của Elastic và dán thẳng vào Dev Tools, nó sẽ tự động convert sang định dạng rút gọn. -
Cú pháp tinh gọn: Không cần quan tâm tới Host hay ngoặc kép thừa. Đoạn cURL dài dòng ở trên khi viết trong Dev Tools chỉ còn:
JSON
GET products/_search
{
"query": {
"match_all": {}
}
}
3. Các API Quản trị hệ thống cốt lõi (The _cat API)
Trước khi thao tác với dữ liệu (CRUD), chúng ta cần biết cách kiểm tra "sức khỏe" của hệ thống. Elasticsearch cung cấp bộ _cat API (Compact and Aligned Text) dùng để in ra các thông tin quản trị dưới dạng bảng text dễ nhìn thay vì JSON lồng nhau.
Hãy mở Kibana -> Management -> Dev Tools và chạy thử các lệnh sau:
Kiểm tra sức khỏe cụm (Cluster Health)
JSON
GET _cluster/health
Kết quả trả về sẽ có trường "status". Đây là chỉ số quan trọng nhất bạn cần quan tâm, với 3 màu cơ bản:
-
Green: Hoàn hảo. Tất cả các Node và dữ liệu dự phòng (Replica) đều hoạt động.
-
Yellow: Dữ liệu gốc (Primary Shard) an toàn, nhưng dữ liệu dự phòng (Replica Shard) chưa được cấp phát (Unassigned).
- Lưu ý: Ở Bài 2 chúng ta setup Single-node (1 node duy nhất). Elasticsearch mặc định yêu cầu phải có 1 bản Replica lưu ở node khác để dự phòng. Vì cụm chỉ có 1 node, nó không thể tự lưu Replica trên chính nó, dẫn đến trạng thái Yellow. Đây là điều hoàn toàn bình thường ở môi trường Local.
-
Red: Nguy hiểm! Một phần dữ liệu gốc đã bị mất kết nối hoặc hỏng. Sẽ có request bị lỗi.
Xem danh sách các Node
JSON
GET _cat/nodes?v
Tham số ?v (verbose) giúp hiển thị thêm dòng tiêu đề cột (Header). Lệnh này liệt kê mức tiêu thụ RAM, CPU, Load Average và vai trò của từng Node trong cụm.
Xem danh sách các Index (Bảng dữ liệu)
JSON
GET _cat/indices?v
Lệnh này hiển thị toàn bộ các Index đang có, trạng thái của chúng, số lượng bản ghi (docs.count) và dung lượng chiếm dụng (store.size). Ban đầu hệ thống của bạn có thể rỗng hoặc chỉ chứa các index hệ thống bắt đầu bằng dấu chấm (VD: .kibana).
Bí kíp thực chiến: Các endpoint trong Elasticsearch thường bắt đầu bằng dấu gạch dưới
_(như_search,_cat,_cluster) là các API hệ thống định sẵn. Các đường dẫn không có dấu_thường là tên Index do bạn tự đặt. Nhờ quy tắc này, Elasticsearch tránh được việc tên Index của người dùng trùng với tên API.
Qua Bài 3, bạn đã nắm được công cụ và giao thức để "nói chuyện" với Elasticsearch.
All Rights Reserved