Hướng dẫn tạo Index và quản lý Index trong Elasticsearch – Cuongquach.com | Khi bắt đầu bài này trong series về Elasticsearch (ES) thì hẳn bạn phải có thể phân biệt các kiến thức cơ bản về khái niệm Index, Document, Type,… còn nếu chưa thì bạn nên tìm hiểu những khái niệm đó trước nhé. Vào thời điểm bạn quản lý một hệ thống Logging Elasticsearch thì chắc chắn quá trình khởi tạo một Index trong Elasticsearch gần như là kiến thức cơ bản mà ai cũng cần nắm bắt.
Có thể bạn quan tâm chủ đề khác
– Tìm hiểu dịch vụ logstash trong hệ thống ELK Stack Logging
– Ebook Beginning Elastic Stack
– Giám sát log server Linux thời gian thực với công cụ Log.io
– Các khái niệm về log trong Linux
Contents
- Index trong Elasticsearch là gì ?
- Tương tác với Elasticsearch
- 1. Tạo Index trong Elasticsearch
- 2. Liệt kê các Index với thông số
- 3. Kiểm tra thông tin trạng thái một Index
- 4. Thêm dữ liệu vào Index
- 5. Mở/Đóng Index
- 6. Đọc dữ liệu document từ một Index
- 7. Cập nhật thông số của một Index
- 8. Xoá một Index
- Tổng kết
Index trong Elasticsearch là gì ?
Index là một tập hợp lưu trữ các dữ liệu document và thuộc tính document, thuộc về một Type trong Elasticsearch. Nếu so sánh dễ mường tượng nhất, thì bạn có thể so sánh Index giống như khái niệm Database trong hệ Cơ Sở Dữ Liệu Quan Hệ, mặc dù không hoàn toàn như vậy.
Index có thể lưu trữ rất nhiều document trong một Type và một Index được định danh bởi tên với kiểu chữ thường (không viết chữ hoa). Tên của Index sẽ được dùng để thực hiện quá trình index, tìm kiếm, cập nhật,… .
Tương tác với Elasticsearch
Nhằm nhắc lại với bạn rằng chúng ta sẽ tương tác với Elasticsearch qua REST API với các phương thức HTTP Method như “GET, POST, PUT, DELETE” trong phần thực hành của bài viết này. REST API sẽ có format như sau :
http://host:port/[index]/[type]/[_action/id]
Với các ví dụ ở dưới thì ‘localhost‘ chính là máy chủ ES của bạn, bạn đang đứng ở terminal thực thi lệnh trên máy chủ ES. Bạn có thể sử dụng một số chương trình API Tool Client như Postman,.. hoặc có thể sử dụng chương trình lệnh ‘curl‘ trên Linux.
1. Tạo Index trong Elasticsearch
Về dữ liệu document trong ES, thì các document có thể nằm trong một Index cụ thể hoặc ở các Index khác. Một số quy ước về cách đặt tên Index như sau :
- Chữ thường (không chữ hoa)
- Không chứa kí tự đặc biệt sau: \, /, *, ?, “, <, >, |, ` ` (space character), ,, #
- Không bắt đầu bằgn các kí tự: -, _ , +
- Giới hạn 255 kí tự
Thông thường Elasticsearch cho phép bạn tạo Index theo tên mong muốn, nhưng nếu bạn có các client gửi dữ liệu về Elasticsearch thì ES có sẵn tính năng khởi tạo tên Index ngẫu nhiên để chứa
Thông số Index
Một Index khi được tạo ra sẽ có thể kèm các thông số liên quan như sau :
# curl -X PUT "localhost:9200/cuongquach-company" -H 'Content-Type: application/json' -d' { "settings" : { "index" : { "number_of_shards" : 4, "number_of_replicas" : 1 } } } '
Bạn sẽ nhận được response như sau là thành công tạo Index .
{"acknowledged":true,"shards_acknowledged":true,"index":"cuongquach-company"}
(còn một vài ví dụ tạo index sẽ bổ sung sau)
2. Liệt kê các Index với thông số
Bạn có thể liệt kê các Index đang tồn tại trên hệ thống ES Cluster như sau :
# curl -X GET "localhost:9200/_cat/indices?v" health status index uuid pri rep docs.count docs.deleted store.size pri.store.size green open .kibana I1PNVZWrQ-qDutbGN2jAhA 1 0 2 0 10.4kb 10.4kb yellow open cuongquach-company C4UD3u4bS6qKq8uWARFIgg 4 1 0 0 1kb 1kb
Bạn dễ dàng thấy thông tin về : tình trạng index, tên index, uuid index, số lượng primary shard/replica shard của Index đó, số lượng document của index,….
Chú thích :
– ?v : tham số action này giúp trả về tên header của từng cột dữ liệu. Nếu không có giá trị này thì dữ liệu trả về sẽ như sau :
# curl -X GET "localhost:9200/_cat/indices" green open .kibana I1PNVZWrQ-qDutbGN2jAhA 1 0 2 0 10.4kb 10.4kb yellow open cuongquach-company C4UD3u4bS6qKq8uWARFIgg 4 1 0 0 1kb 1kb
3. Kiểm tra thông tin trạng thái một Index
Bạn muốn kiểm tra thông tin cụ thể về một Index như alias, mapping, settings, uuid,... thì có thể action với cú pháp sau :
# curl -X GET http://localhost:9200/cuongquach-company?pretty { "cuongquach-company" : { "aliases" : { }, "mappings" : { "employee" : { "properties" : { "name" : { "type" : "text", "fields" : { "keyword" : { "type" : "keyword", "ignore_above" : 256 } } } } } }, "settings" : { "index" : { "creation_date" : "1535098514103", "number_of_shards" : "4", "number_of_replicas" : "3", "uuid" : "C4UD3u4bS6qKq8uWARFIgg", "version" : { "created" : "6030099" }, "provided_name" : "cuongquach-company" } } } }
4. Thêm dữ liệu vào Index
Giờ chúng ta sẽ thử thêm dữ liệu document vào Index , với tên một nhân viên ở id đầu tiên để xem Index ‘cuongquach-company’ đã sử dụng được chưa ? Đã có thể chứa dữ liệu document hay không ?
Từ Elasticsearch phiên bản 6.x đến 7.x thì một Index chỉ có thể có 1 Type và mỗi document sẽ cần có một giá trị ‘_id‘ và ‘_type‘ được lấy từ định dạng URL mà bạn gửi truy vấn HTTP API hoặc các thông tin đó sẽ được khởi tạo ngẫu nhiên. Tên ID Document có thể là số hoặc chữ.
Cấu trúc format URL khi thêm dữ liệu Document đó sẽ theo dạng như sau :
http://host:port/[index]/[type]/[document]
Cùng truyền dữ liệu như sau nào.
# curl -X POST "localhost:9200/cuongquach-company/employee/1" -H 'Content-Type: application/json' -d' { "name": "cuong.quachchi" } ' { "_index": "cuongquach-company", "_type": "employee", "_id": "1", "_version": 1, "result": "created", "_shards": { "total": 2, "successful": 1, "failed": 0 }, "_seq_no": 0, "_primary_term": 2 }
Với output trả về từ Elasticsearch bạn đã thấy kết quả về document _id=1 của chúng ta. Dùng cú pháp sau để coi thông tin về dữ liệu document _id 1 .
# curl -X GET http://localhost:9200/cuongquach-company/employee/1?pretty { "_index" : "cuongquach-company", "_type" : "employee", "_id" : "1", "_version" : 3, "found" : true, "_source" : { "name" : "cuong.quachchi" } }
5. Mở/Đóng Index
Nếu bạn có nhu cầu bảo trì dữ liệu của một Index hoặc thay đổi cấu hình Index, bạn có thể đóng (close) Index lại giúp cho các hoạt động read/write không thể thực hiện trên Index đó. Sau khi bạn bảo trì hoàn tất bạn có thể mở lại Index đó để tiếp tục sử dụng Index.
+ Đóng Index
POST /{index}/_close
+ Mở Index
POST /{index}/_open
Ví dụ, bạn đóng Index cuongquach-company :
# curl -X POST 'localhost:9200/cuongquach-company/_close' {"acknowledged":true} # curl -X POST 'localhost:9200/cuongquach-company/_open' {"acknowledged":true,"shards_acknowledged":true}
6. Đọc dữ liệu document từ một Index
Nếu bạn có nhu cầu đọc các thông tin dữ liệu như document trong một Index thì bạn có thể sử dụng action ‘_search‘ .
# curl -X GET "localhost:9200/cuongquach-company/_search?pretty" { "took" : 1, "timed_out" : false, "_shards" : { "total" : 4, "successful" : 4, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : 3, "max_score" : 1.0, "hits" : [ { "_index" : "cuongquach-company", "_type" : "employee", "_id" : "3", "_score" : 1.0, "_source" : { "name" : "cuong.quachchi" } }, { "_index" : "cuongquach-company", "_type" : "employee", "_id" : "1", "_score" : 1.0, "_source" : { "name" : "cuong.quachchi" } }, { "_index" : "cuongquach-company", "_type" : "employee", "_id" : "2", "_score" : 1.0, "_source" : { "name" : "cuong.quachchi2" } } ] } }
7. Cập nhật thông số của một Index
Nếu bạn muốn thay đổi một số thông số cài đặt cho Index như số lượng primary shard/replica shard,… Giả sử bạn muốn thay đổi thông số replica shard là 3 cho Index ‘cuongquach-company‘ thì bạn có thể làm như sau (replica shard , có thể thay đổi thông số khi đã vận hành).
PUT /[index]/_settings
Đầu tiên là cần close Index ‘cuongquach-company‘ , phải close Index thì mới được phép cập nhật các thông số.
# curl -X POST 'localhost:9200/cuongquach-company/_close' {"acknowledged":true} # curl -X GET "localhost:9200/_cat/indices?v" health status index uuid pri rep docs.count docs.deleted store.size pri.store.size green open .kibana I1PNVZWrQ-qDutbGN2jAhA 1 0 2 0 10.4kb 10.4kb close cuongquach-company C4UD3u4bS6qKq8uWARFIgg
Tiến hành cập nhật thông số cấu hình cho Index và open index trở lại.
# curl -X PUT "localhost:9200/cuongquach-company/_settings" -H 'Content-Type: application/json' -d' { "index" : { "number_of_replicas" : 3 } } ' # curl -X POST 'localhost:9200/cuongquach-company/_open' {"acknowledged":true,"shards_acknowledged":true}
Kiểm tra lại nào, xem số lượng replica shard của Index ‘cuongquach-company‘ thay đổi không ?!
# curl -X GET "localhost:9200/_cat/indices?v" health status index uuid pri rep docs.count docs.deleted store.size pri.store.size green open .kibana I1PNVZWrQ-qDutbGN2jAhA 1 0 2 0 10.4kb 10.4kb yellow open cuongquach-company C4UD3u4bS6qKq8uWARFIgg 4 3 0 0 1kb 1kb
8. Xoá một Index
Khi mà bạn không cần một Index nào đó nữa và có nhu cầu xoá nó đi thì có thể sử dụng method HTTP DELETE khi gửi API HTTP.
# curl -X DELETE "localhost:9200/cuongquach-company" {"acknowledged":true}
Method HTTP DELETE có thể xoá một hoặc nhiều Index cùng một lúc, với dấu ‘,’ ngăn cách giữa các tên Index.
# curl -X DELETE "localhost:9200/cuongquach-company1,cuongquach-test1,cuongquach-demo1" {"acknowledged":true}
Lưu ý:
– Nếu bạn đã xoá một Index rồi thì sẽ không cách nào khôi phục lại dữ liệu Index đó, trừ khi bạn khôi phục từ bản snapshot nào đó mà bạn có sử dụng.
Tổng kết
Nhìn chung vẫn còn kha khá các hoạt động quản lý thao tác với Index trong Elasticsearch. Nhưng với những phần tóm gọn ở trên cũng đã đủ để bạn có thể thao tác các chức năng quản lý Index của Elasticsearch. Hy vọng các nội dung trên giúp ích cho các bạn và đừng ngại ghé thăm Cuongquach.com nhé.
Nguồn: https://cuongquach.com/