- Tương tác với Elaticsearch với cURL
- Tương tác với Elaticsearch với Kibana
- Sử dụng cơ bản Elasticsearch
- Kiểm tra trạng thái Elasticsearch
- Tạo một Index
- Lưu tài liệu vào Index
- Đọc tài liệu từ Index
- Xóa tài liệu khỏi Index
- Thực hiện hàng loạt lệnh
Những phần hướng dẫn này viết theo nguồn từ Document của Elasearch, tương tác với Elasticsearch thực hiện bằng lệnh curl
để tạo ra các yêu cầu HTTPD GET
, PUSH
, UPDATE
, DELETE
tới Elaticsearch.
Bạn có thể sử dụng ngôn ngữ lập trình của mình với các thư viện thích hợp thay vì dùng trực tiếp cUrl, miễn
là tạo được HTTP Request với các phương thức như PUT, GET ... kèm dữ liệu JSON (REST API
) gủi đến server Elasticsearch
Tương tác với Elaticsearch với cURL
Giả sử Elaticsearch của bạn truy cập được bằng địa chỉ http://localhost:9200
để thực hiện HTTP Request đến nó gõ lệnh curl
với tham số -X
sau đó là tên phương thức (POST
, GET
, DELETE
...) rồi đến địa chỉ Elaticsearch
curl -X PHƯƠNG_THỨC http://localhost:9200
curl -X GET http://localhost:9200
HTTP Request với dữ liệu JSON (REST API
): khi cần gửi dữ liệu JSON đi kèm, cần chỉ định HEADER Content-Type: application/json
để làm điều này cho vào tham số curl
đoạn mã -H 'Content-Type: application/json'
, sau đó là nội dung JSON-d '{Nội dung JSON}'
Ví dụ sau gửi nội dung JSON
{ "name": "XuanThuLab", "age": "20" }
Đến địa chỉ localhost:9200/customer/_doc/1?pretty
bằng phương thức PUT
curl -X PUT "localhost:9200/customer/_doc/1?pretty" -H 'Content-Type: appliation/json' -d' { "name": "John Doe", "age": "20" } '
Tương tác Elasticsearch bằng Kibana
Kibana là công cụ quản lý, tương tác với Elasticsearch
thông qua nền web, ở phần trước đã cài đặt Kibana cùng với Elasticsearch, bạn chỉ cần truy cập đến địa chỉ http://localhost:5601
để vào công cụ này.
Tạm thời chưa đi sâu vào công cụ này, ở đây bạn chỉ cần vào mục Dev Tools
(xem ở trên), để truy cập vào công cụ Console
, tại đó bạn gõ các HTTP Request và gửi đến Elastic một cách trực quan (kể cả kết quả trả về).
Ví dụ tạo truy vấn PUT
chèn, cập nhật dữ liệu như hình dưới, rất trực quan!
Sử dụng Elasticsearch cơ bản
Kiểm tra sức khỏe của Elasticsearch
Trong quá trình Elasticsearch vận hành, cần giám sát tình trạng của nó, để kiểm tra thực hiện HTTP/REST
đến _cat/health?v
bằng curl sau:
curl -X GET "localhost:9200/_cat/health?v"
Kibana
: Kết quả cho thấy tên của cluster là elasticsearch
và trạng thái là yellow, có ba trạng thái:
Green
Mọi thứ OK, cluster có thể thực hiện đầy đủ chức năngYellow
Dữ liệu ổn, nhưng có các bản backup replicasRed
dữ liệu có vấn đề
Tương tự, kiểm tra danh sách các node (server) thực hiện GET
đến /_cat/nodes?v
curl -X GET "localhost:9200/_cat/nodes?v"
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
172.30.0.3 27 95 2 0.13 0.10 0.08 mdi * elasticsearch
Ở đây trả về có một node (server) trong cluster, node này có tên là elasticsearch
Liệt kê các Index
Muốn liệt kê các Index thì GET
đến /_cat/indices?v
curl -X GET "localhost:9200/_cat/indices?v"
Khởi tạo một Index
Ở phần trước đề cập, Index là một tập hợp những dữ liệu có chung một số tên thuộc tính, tính chất - nó giống như một table trong SQL. Giờ ta sẽ tiến hành tạo một index có tên là customer
, thật đơn giản chỉ việc PUT
đến địa chỉ /customer?pretty
curl -X PUT "localhost:9200/customer?pretty"
Kibana
: PUT /customer?pretty
Xóa một index
Xóa đi một index có tên indexname
DELET /indexname?pretty
Lưu tài liệu vào Index / Thay thế tài liệu
Như đã biết các đơn vị dữ liệu là các Document, những Document này được biểu diễn bằng JSON, ví dụ đây là một dữ liệu:
{ "name": "XuanThu Lab", "age": "20" }
Mỗi dữ liệu lưu vào Index sẽ có một id
gán cho nó, giờ sẽ lưu dữ liệu trên vào Index customer
và gán cho nó id là 1
, để làm điều đó thực hiện phương thức PUT
đến /customer/_doc/1?pretty
đính kèm dữ liệu JSON
curl -X PUT "localhost:9200/customer/_doc/1?pretty" -H 'Content-Type: application/json' -d' { "name": "XuanThu Lab", "age": "20" } '
Kibana
: PUT /customer/_doc/1?pretty { "name": "XuanThu Lab", "age": "20" }
Sau khi chạy lệnh PUT, kết quả ES trả về là:
{ "_index" : "customer", "_type" : "_doc", "_id" : "1", "_version" : 1, "result" : "created", "_shards" : { "total" : 2, "successful" : 1, "failed" : 0 }, "_seq_no" : 0, "_primary_term" : 1 }
Cho biết lưu thành công dữ liệu vào index customer
, với id là 1
Nếu thực hiện PUT
theo cú pháp trên, nếu id tài liệu đã tồn tại trước đó, nó sẽ được thay thế bởi dữ liệu mới => CẬP NHẬT
Nếu thực hiện PUT
và không chỉ ra id thì ES sẽ tự sinh ID cho tài liệu mới. Bạn có thể dùng POST
để tạo mới cho trường hợp này POST /customer/_doc/?pretty
curl -X POST "localhost:9200/customer/_doc?pretty" -H 'Content-Type: application/json' -d' { "name": "Example Name" }'
Đọc tài liệu từ Index
Nếu đã biết id của tài liệu trong Index customer
, việc đọc nội dung của nó thực hiện bằng GET
đến địa chỉ /customer/_doc/1?pretty
curl -X GET "localhost:9200/customer/_doc/1?pretty"
{
"_index" : "customer",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"_seq_no" : 0,
"_primary_term" : 1,
"found" : true,
"_source" : {
"name" : "XuanThu Lab",
"age" : "20"
}
}
Dữ liệu trả về là nội dung của tài liệu ở khóa _source
đi kèm các thông tin như index
, id
...
Nếu tài liệu không tồn tại, ví dụ GET với id = 5, thì nó sẽ thông báo không tìm thấy found = false
curl -X GET "localhost:9200/customer/_doc/5?pretty"
{
"_index" : "customer",
"_type" : "_doc",
"_id" : "5",
"found" : false
}
Xóa tài liệu khỏi Index
Để xóa tài liệu với id
chỉ việc thực hiện DELETE
đến địa chỉ /indexname/_doc/id?pretty
curl -X PUT "localhost:9200/customer/_doc/3?pretty" -H 'Content-Type: application/json' -d' { "name": "Testname"}' curl -X DELETE localhost:9200/customer/_doc/3?pretty
Thậm chí nếu muốn xóa cả index có tên là indexname
cũng thực hiện DELETE
đến /indexname?pretty
curl -X DELETE localhost:9200/customer?pretty
Thực hiện cả một bó lệnh
Các thao tác trên tài liệu như update
, create
, delete
có thể tập hợp vào một file JSON gồm cả dữ liệu rồi yêu cầu ES thực hiện tập lệnh đó bằng cách POST
tới /_bulk
.
Cơ bản thì file JSON mổ tả cấu trúc dữ liệu trên từng dòng dạng:
lệnh_và_dữ_diệu_meta\n dữ_liệu_tùy_chọn\n lệnh_và_dữ_diệu_meta\n dữ_liệu_tùy_chọn\n lệnh_và_dữ_diệu_meta\n dữ_liệu_tùy_chọn\n ...
Như vậy mỗi lệnh được mô tả bởi hai dòng liên tiếp. Ví dụ dữ liệu sau:
{ "index" : { "_index" : "test", "_id" : "1" } } { "field1" : "value1" } { "delete" : { "_index" : "test", "_id" : "2" } } { "create" : { "_index" : "test", "_id" : "3" } } { "field1" : "value3" } { "update" : {"_id" : "1", "_index" : "test"} } { "doc" : {"field2" : "value2"} }
- Hai dòng dòng đầu cho biết tạo Document mới với id
1
, lưu vào Indextest
, dữ liệu là{ "field1" : "value1" }
- Dòng 3 cho biết thực hiện xóa ...
Để thực hiện bó lệnh lệnh, chỉ việc truyền dữ liệu đó tới /_bulk
bằng POST
curl -X POST "localhost:9200/_bulk" -H 'Content-Type: application/json' -d' { "index" : { "_index" : "test", "_id" : "1" } } { "field1" : "value1" } { "delete" : { "_index" : "test", "_id" : "2" } } { "create" : { "_index" : "test", "_id" : "3" } } { "field1" : "value3" } { "update" : {"_id" : "1", "_index" : "test"} } { "doc" : {"field2" : "value2"} } '
Hoặc nếu dữ liệu này lưu ở file data.json
thì thực hiện nạp vào bằng cách
$ curl -s -H "Content-Type: application/x-ndjson" -XPOST localhost:9200/_bulk --data-binary "@data.json";
Trên đây là các lệnh cơ bản liên quan đến tạo, cập nhật, xóa tài liệu. Sau khi dữ liệu được đánh chỉ mục như vậy vào các Index, lúc này bạn có thể thực hiện truy vấn để khai thác khả năng tìm kiếm mạnh mẽ của ES. Đến phần tiếp theo API tìm kiếm dữ liệu Elasticsearch