- 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:
GreenMọi thứ OK, cluster có thể thực hiện đầy đủ chức năngYellowDữ liệu ổn, nhưng có các bản backup replicasReddữ 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
