Elasticsearch REST API
Elasticsearch Rest API
Elasticsearch là một công cụ tìm kiếm và phân tích dữ liệu phân tán, theo phong cách RESTful, có khả năng giải quyết nhiều tình huống sử dụng mới xuất hiện. Là trung tâm của Elastic Stack, nó lưu trữ dữ liệu tập trung của bạn, giúp bạn phát hiện những sự kiện dự kiến và không dự kiến.
Elasticsearch được phát triển dựa trên thư viện tìm kiếm Lucene. Elasticsearch ẩn đi sự phức tạp của Lucene, cung cấp giao diện API REST / Java dễ sử dụng (ngoài ra còn có các giao diện API bằng ngôn ngữ khác).
Dưới đây gọi tắt là ES.
Tài liệu chi tiết nhất về REST API nên tham khảo: ES Official REST API
Cú pháp ElasticSearch Rest API
Các phần thành phần của yêu cầu gửi đến Elasticsearch giống như các yêu cầu HTTP thông thường khác:
curl -X<VERB> '<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>' -d '<BODY>'
VERB
:Phương thức HTTP, hỗ trợ:GET
,POST
,PUT
,HEAD
,DELETE
PROTOCOL
:giao thức http hoặc https (chỉ có thể sử dụng khi có proxy https phía trước Elasticsearch)HOST
:tên máy chủ của bất kỳ nút nào trong cụm Elasticsearch, nếu là nút trên máy cục bộ, thì gọi là localhostPORT
:cổng dịch vụ HTTP của Elasticsearch, mặc định là 9200PATH
:đường dẫn API (ví dụ:_count
sẽ trả về số lượng tài liệu trong cụm),PATH
:có thể chứa nhiều thành phần, ví dụ_cluster/stats
hoặc_nodes/stats/jvm
QUERY_STRING
:một số tham số truy vấn tùy chọn, ví dụ tham số ?pretty sẽ làm cho yêu cầu trả về dữ liệu JSON dễ đọc hơnBODY
:một cơ thể yêu cầu ở định dạng JSON (nếu yêu cầu cần)
ElasticSearch Rest API được chia thành hai loại:
- URI Search:sử dụng tham số truy vấn trong URL
- Request Body Search:dựa trên DSL định dạng JSON, hoàn chỉnh hơn
Ví dụ về URI Search:
Ví dụ về Request Body Search:
Index API
Tài liệu tham khảo: Elasticsearch Official cat Index API
Tạo chỉ mục
Để tạo mới Index, bạn có thể gửi trực tiếp yêu cầu PUT
đến máy chủ ES.
Cú pháp:
PUT /my_index
{
"settings": { ... any settings ... },
"mappings": {
"type_one": { ... any mappings ... },
"type_two": { ... any mappings ... },
...
}
}
Ví dụ:
PUT /user
{
"settings": {
"index": {
"number_of_shards": 3,
"number_of_replicas": 2
}
}
}
Máy chủ trả về một đối tượng JSON, trong đó trường acknowledged
biểu thị hoạt động thành công.
{"acknowledged":true,"shards_acknowledged":true,"index":"user"}
Nếu bạn muốn vô hiệu hóa việc tạo tự động chỉ mục, bạn có thể thêm cấu hình sau vào config/elasticsearch.yml
trong mỗi nút:
action.auto_create_index: false
Xóa chỉ mục
Tiếp theo, chúng ta có thể gửi yêu cầu DELETE
để xóa chỉ mục này.
DELETE /user
Xóa nhiều chỉ mục
DELETE /index_one,index_two
DELETE /index_*
Xem chỉ mục
Bạn có thể sử dụng yêu cầu GET để xem thông tin về chỉ mục
# Xem thông tin liên quan đến chỉ mục
GET kibana_sample_data_ecommerce
# Xem tổng số tài liệu trong chỉ mục
GET kibana_sample_data_ecommerce/_count
# Xem 10 tài liệu đầu tiên để hiểu định dạng tài liệu
GET kibana_sample_data_ecommerce/_search
# _cat indices API
# Xem các chỉ mục
GET /_cat/indices/kibana*?v&s=index
# Xem chỉ mục có trạng thái là xanh
GET /_cat/indices?v&health=green
# Sắp xếp theo số lượng tài liệu
GET /_cat/indices?v&s=docs.count:desc
# Xem các trường cụ thể
GET /_cat/indices/kibana*?pri&v&h=health,index,pri,rep,docs.count,mt
# Xem bộ nhớ mà chỉ mục sử dụng
GET /_cat/indices?v&h=i,tm&s=tm:desc
Bí danh chỉ mục
Bí danh chỉ mục trong ES chính là tên khác mà bạn đặt cho một hoặc nhiều chỉ mục. Một ứng dụng điển hình là việc chuyển mượt mà giữa các chỉ mục.
Đầu tiên, tạo chỉ mục my_index, sau đó đặt bí danh my_alias cho nó, ví dụ như sau:
PUT /my_index
PUT /my_index/_alias/my_alias
Bạn cũng có thể thực hiện như sau:
POST /_aliases
{
"actions": [
{ "add": { "index": "my_index", "alias": "my_alias" }}
]
}
Bạn cũng có thể trong một yêu cầu thêm và xóa bí danh:
POST /_aliases
{
"actions": [
{ "remove": { "index": "my_index", "alias": "my_alias" }}
{ "add": { "index": "my_index_v2", "alias": "my_alias" }}
]
}
Điều cần lưu ý là nếu bí danh và chỉ mục là một-đối-một, bạn có thể sử dụng bí danh để lập chỉ mục hoặc truy vấn tài liệu. Tuy nhiên, nếu bí danh và chỉ mục là một-đối-nhiều, việc sử dụng bí danh sẽ gây ra lỗi, vì ES không biết nên viết tài liệu vào chỉ mục nào hoặc đọc tài liệu từ chỉ mục nào.
Một ứng dụng điển hình của bí danh chỉ mục ES là việc chuyển mượt mà giữa các chỉ mục. Để biết thêm chi tiết, bạn có thể xem Phương pháp chuyển mượt mà giữa các chỉ mục Elasticsearch (ES) mà không cần tắt máy (không cần khởi động lại).
Mở/Đóng chỉ mục
Bằng cách thêm _close
hoặc _open
vào POST
, bạn có thể mở hoặc đóng chỉ mục.
Mở chỉ mục
# Mở chỉ mục
POST kibana_sample_data_ecommerce/_open
# Đóng chỉ mục
POST kibana_sample_data_ecommerce/_close
Tài liệu
############Create Document############
#create document. _id is automatically generated
POST users/_doc
{
"user" : "Mike",
"post_date" : "2019-04-15T14:12:12",
"message" : "trying out Kibana"
}
#create document. Specify Id. If id already exists, an error is returned
PUT users/_doc/1?op_type=create
{
"user" : "Jack",
"post_date" : "2019-05-15T14:12:12",
"message" : "trying out Elasticsearch"
}
#create document. Specify ID. If it already exists, an error is returned
PUT users/_create/1
{
"user" : "Jack",
"post_date" : "2019-05-15T14:12:12",
"message" : "trying out Elasticsearch"
}
### Get Document by ID
#Get the document by ID
GET users/_doc/1
### Index & Update
#Update specified ID (delete first, then write)
GET users/_doc/1
PUT users/_doc/1
{
"user" : "Mike"
}
#GET users/_doc/1
#Add fields to the original document
POST users/_update/1/
{
"doc":{
"post_date" : "2019-05-15T14:12:12",
"message" : "trying out Elasticsearch"
}
}
### Delete by Id
# Delete document
DELETE users/_doc/1
### Bulk Operations
#Execute twice, check the result each time
#Execute the first time
POST _bulk
{ "index" : { "_index" : "test", "_id" : "1" } }
{ "field1" : "value1" }
{ "delete" : { "_index" : "test", "_id" : "2" } }
{ "create" : { "_index" : "test2", "_id" : "3" } }
{ "field1" : "value3" }
{ "update" : {"_id" : "1", "_index" : "test"} }
{ "doc" : {"field2" : "value2"} }
#Execute the second time
POST _bulk
{ "index" : { "_index" : "test", "_id" : "1" } }
{ "field1" : "value1" }
{ "delete" : { "_index" : "test", "_id" : "2" } }
{ "create" : { "_index" : "test2", "_id" : "3" } }
{ "field1" : "value3" }
{ "update" : {"_id" : "1", "_index" : "test"} }
{ "doc" : {"field2" : "value2"} }
### mget Operations
GET /_mget
{
"docs" : [
{
"_index" : "test",
"_id" : "1"
},
{
"_index" : "test",
"_id" : "2"
}
]
}
#Specify index in URI
GET /test/_mget
{
"docs" : [
{
"_id" : "1"
},
{
"_id" : "2"
}
]
}
GET /_mget
{
"docs" : [
{
"_index" : "test",
"_id" : "1",
"_source" : false
},
{
"_index" : "test",
"_id" : "2",
"_source" : ["field3", "field4"]
},
{
"_index" : "test",
"_id" : "3",
"_source" : {
"include": ["user"],
"exclude": ["user.location"]
}
}
]
}
### msearch Operations
POST kibana_sample_data_ecommerce/_msearch
{}
{"query" : {"match_all" : {}},"size":1}
{"index" : "kibana_sample_data_flights"}
{"query" : {"match_all" : {}},"size":2}
### Clear Test Data
#Clear data
DELETE users
DELETE test
DELETE test2
Tạo tài liệu
Xác định ID
Định dạng cú pháp:
PUT /_index/_type/_create/_id
Ví dụ:
PUT /user/_doc/_create/1
{
"user": "Trương Tam",
"title": "Kỹ sư",
"desc": "Quản lý cơ sở dữ liệu"
}
Lưu ý: Xác định Id, nếu id đã tồn tại, sẽ báo lỗi
Tự động tạo ID
Khi thêm bản ghi mới, bạn cũng có thể không xác định Id, lúc này bạn cần thay đổi yêu cầu thành POST.
Định dạng cú pháp:
POST /_index/_type
Ví dụ:
POST /user/_doc
{
"user": "Trương Tam",
"title": "Kỹ sư",
"desc": "Quản trị viên siêu cấp"
}
Xóa tài liệu
Định dạng cú pháp:
DELETE /_index/_doc/_id
Ví dụ:
DELETE /user/_doc/1
Cập nhật tài liệu
Xóa trước, sau đó viết vào
Định dạng cú pháp:
PUT /_index/_type/_id
Ví dụ:
PUT /user/_doc/1
{
"user": "Lý Tứ",
"title": "Kỹ sư",
"desc": "Quản trị viên siêu cấp"
}
Thêm trường vào tài liệu gốc
Định dạng cú pháp:
POST /_index/_update/_id
Ví dụ:
POST /user/_update/1
{
"doc":{
"age" : "30"
}
}
Truy vấn tài liệu
Truy vấn theo ID cụ thể
Định dạng cú pháp:
GET /_index/_type/_id
Ví dụ:
GET /user/_doc/1
Kết quả:
{
"_index": "user",
"_type": "_doc",
"_id": "1",
"_version": 1,
"_seq_no": 536248,
"_primary_term": 2,
"found": true,
"_source": {
"user": "Trương Tam",
"title": "Kỹ sư",
"desc": "Quản lý cơ sở dữ liệu"
}
}
Trong dữ liệu trả về, trường found
biểu thị truy vấn thành công, trường _source
trả về bản gốc của bản ghi.
Nếu id không chính xác, dữ liệu sẽ không được tìm thấy, và trường found
sẽ là false
Truy vấn tất cả các bản ghi
Sử dụng phương thức GET
, yêu cầu trực tiếp đến /index/type/_search
, tất cả các bản ghi sẽ được trả về.
$ curl 'localhost:9200/user/admin/_search?pretty'
{
"took" : 1,
"timed_out" : false,
"_shards" : {
"total" : 3,
"successful" : 3,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : 2,
"max_score" : 1.0,
"hits" : [
{
"_index" : "user",
"_type" : "admin",
"_id" : "WWuoDG8BHwECs7SiYn93",
"_score" : 1.0,
"_source" : {
"user" : "Lý Tứ",
"title" : "Kỹ sư",
"desc" : "Quản lý hệ thống"
}
},
{
"_index" : "user",
"_type" : "admin",
"_id" : "1",
"_score" : 1.0,
"_source" : {
"user" : "Trương Tam",
"title" : "Kỹ sư",
"desc" : "Quản trị viên siêu cấp"
}
}
]
}
}
Trong kết quả trả về ở trên, trường took
biểu thị thời gian tiêu tốn cho thao tác này (đơn vị là mili giây), trường timed_out
biểu thị liệu có quá thời gian hay không, trường hits
biểu thị các bản ghi đã truy vấn được, trong đó các trường con có ý nghĩa như sau.
total
: số lượng bản ghi trả về, trong trường hợp này là 2.max_score
: mức độ khớp cao nhất, trong trường hợp này là1.0
.hits
: mảng các bản ghi trả về.
Trong các bản ghi trả về, mỗi bản ghi đều có một trường _score
, biểu thị mức độ khớp, mặc định là được sắp xếp theo trường này theo thứ tự giảm dần.
Tìm kiếm toàn văn
ES sử dụng cú pháp truy vấn độc đáo của chính nó, yêu cầu các yêu cầu GET đi kèm với dữ liệu.
$ curl -H 'Content-Type: application/json' 'localhost:9200/user/admin/_search?pretty' -d '
{
"query" : { "match" : { "desc" : "quản lý" }}
}'
Đoạn mã trên sử dụng Match Query, với điều kiện khớp được chỉ định là trường desc
chứa từ "quản lý". Kết quả trả về như sau.
{
"took" : 2,
"timed_out" : false,
"_shards" : {
"total" : 3,
"successful" : 3,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : 2,
"max_score" : 0.38200712,
"hits" : [
{
"_index" : "user",
"_type" : "admin",
"_id" : "WWuoDG8BHwECs7SiYn93",
"_score" : 0.38200712,
"_source" : {
"user" : "Lý Tứ",
"title" : "Kỹ sư",
"desc" : "Quản lý hệ thống"
}
},
{
"_index" : "user",
"_type" : "admin",
"_id" : "1",
"_score" : 0.3487891,
"_source" : {
"user" : "Trương Tam",
"title" : "Kỹ sư",
"desc" : "Quản trị viên siêu cấp"
}
}
]
}
}
Elastic mặc định trả về 10 kết quả mỗi lần, bạn có thể thay đổi cài đặt này thông qua trường size
, và cũng có thể chỉ định vị trí thông qua trường from
.
$ curl 'localhost:9200/user/admin/_search' -d '
{
"query" : { "match" : { "desc" : "quản lý" }},
"from": 1,
"size": 1
}'
Đoạn mã trên chỉ định, bắt đầu từ vị trí 1 (mặc định là bắt đầu từ vị trí 0), chỉ trả về một kết quả.
Phép toán logic
Nếu có nhiều từ khóa tìm kiếm, Elastic coi chúng là mối quan hệ or
.
$ curl 'localhost:9200/user/admin/_search' -d '
{
"query" : { "match" : { "desc" : "phần mềm hệ thống" }}
}'
Đoạn mã trên tìm kiếm phần mềm or hệ thống
.
Nếu bạn muốn thực hiện tìm kiếm and
với nhiều từ khóa, bạn phải sử dụng Bool Query.
$ curl -H 'Content-Type: application/json' 'localhost:9200/user/admin/_search?pretty' -d '
{
"query": {
"bool": {
"must": [
{ "match": { "desc": "quản lý" } },
{ "match": { "desc": "siêu cấp" } }
]
}
}
}'
Thực hiện hàng loạt
Hỗ trợ thực hiện các hoạt động trên các chỉ mục khác nhau trong một lần gọi API
Hỗ trợ bốn loại hoạt động
- index
- create
- update
- delete
Nếu một hoạt động đơn lẻ thất bại, điều này sẽ không ảnh hưởng đến các hoạt động khác.
Kết quả trả về bao gồm kết quả của từng hoạt động được thực hiện.
POST _bulk
{ "index" : { "_index" : "test", "_id" : "1" } }
{ "field1" : "value1" }
{ "delete" : { "_index" : "test", "_id" : "2" } }
{ "create" : { "_index" : "test2", "_id" : "3" } }
{ "field1" : "value3" }
{ "update" : {"_id" : "1", "_index" : "test"} }
{ "doc" : {"field2" : "value2"} }
Lưu ý: Nếu ví dụ trên được thực hiện nhiều lần, kết quả sẽ không giống nhau.
Đọc hàng loạt
Đọc nhiều chỉ mục
GET /_mget
{
"docs" : [
{
"_index" : "test",
"_id" : "1"
},
{
"_index" : "test",
"_id" : "2"
}
]
}
Đọc một chỉ mục
GET /test/_mget
{
"docs" : [
{
"_id" : "1"
},
{
"_id" : "2"
}
]
}
GET /_mget
{
"docs" : [
{
"_index" : "test",
"_id" : "1",
"_source" : false
},
{
"_index" : "test",
"_id" : "2",
"_source" : ["field3", "field4"]
},
{
"_index" : "test",
"_id" : "3",
"_source" : {
"include": ["user"],
"exclude": ["user.location"]
}
}
]
}
Truy vấn hàng loạt
POST kibana_sample_data_ecommerce/_msearch
{}
{"query" : {"match_all" : {}},"size":1}
{"index" : "kibana_sample_data_flights"}
{"query" : {"match_all" : {}},"size":2}
Tìm kiếm URI
Tìm kiếm URI Elasticsearch tuân theo ngữ cảnh QueryString, dạng như sau:
GET /movies/_search?q=2012&df=title&sort=year:desc&from=0&size=10&timeout=1s
{
"profile": true
}
q
chỉ định câu truy vấn, sử dụng ngữ cảnh QueryStringdf
là trường mặc định, nếu không chỉ địnhsort
sắp xếp:from
vàsize
được sử dụng cho phân trangprofile
có thể xem cách thực hiện truy vấn
GET /movies/_search?q=title:2012&sort=year:desc&from=0&size=10&timeout=1s
{
"profile":"true"
}
Term và Phrase
Beautiful Mind tương đương với Beautiful OR Mind
"Beautiful Mind" tương đương với Beautiful AND Mind
# Truy vấn Term
GET /movies/_search?q=title:Beautiful Mind
{
"profile":"true"
}
# Sử dụng dấu ngoặc kép, Truy vấn Phrase
GET /movies/_search?q=title:"Beautiful Mind"
{
"profile":"true"
}
Nhóm và dấu ngoặc kép
title:(Beautiful AND Mind)
title="Beautiful Mind"
AND, OR, NOT hoặc &&, ||, !
Chú ý: AND, OR, NOT phải viết HOA
# Toán tử boolean
GET /movies/_search?q=title:(Beautiful AND Mind)
{
"profile":"true"
}
GET /movies/_search?q=title:(Beautiful NOT Mind)
{
"profile":"true"
}
Truy vấn phạm vi
[]
biểu thị khoảng đóng{}
biểu thị khoảng mở
Ví dụ:
# Truy vấn phạm vi, cú pháp khoảng
GET /movies/_search?q=title:beautiful AND year:{2010 TO 2018%7D
{
"profile":"true"
}
GET /movies/_search?q=title:beautiful AND year:[* TO 2018]
{
"profile":"true"
}
Ký hiệu toán học
# Hồ sơ sau năm 2010
GET /movies/_search?q=year:>2010
{
"profile":"true"
}
# Hồ sơ từ năm 2010 đến năm 2018
GET /movies/_search?q=year:(>2010 && <=2018)
{
"profile":"true"
}
# Hồ sơ từ năm 2010 đến năm 2018
GET /movies/_search?q=year:(+>2010 +<=2018)
{
"profile":"true"
}
Truy vấn dùng ký tự đại diện
?
đại diện cho 1 ký tự*
đại diện cho 0 hoặc nhiều ký tự
Ví dụ:
GET /movies/_search?q=title:mi?d
{
"profile":"true"
}
GET /movies/_search?q=title:b*
{
"profile":"true"
}
Biểu thức chính quy
title:[bt]oy
Kết hợp mờ và truy vấn gần đúng
Ví dụ:
# Độ tương tự trong khoảng 1 ký tự
GET /movies/_search?q=title:beautifl~1
{
"profile":"true"
}
# Độ tương tự trong khoảng 2 ký tự
GET /movies/_search?q=title:"Lord Rings"~2
{
"profile":"true"
}
Request Body & DSL
Ngoài phương pháp tìm kiếm URI, Elasticsearch còn hỗ trợ việc gửi câu truy vấn thông qua Http Request Body.
GET /kibana_sample_data_ecommerce/_search?ignore_unavailable=true
{
"profile":"true",
"query": {
"match_all": {}
}
}
Phân trang
GET /kibana_sample_data_ecommerce/_search?ignore_unavailable=true
{
"profile": "true",
"from": 0,
"size": 10,
"query": {
"match_all": {}
}
}
Sắp xếp
Tốt nhất là sắp xếp trên trường dạng số hoặc ngày
Bởi vì khi sắp xếp trên trường có nhiều giá trị hoặc đã được phân tích, hệ thống sẽ chọn một giá trị, không thể biết giá trị đó là gì
GET /kibana_sample_data_ecommerce/_search?ignore_unavailable=true
{
"profile": "true",
"sort": [
{
"order_date": "desc"
}
],
"from": 1,
"size": 10,
"query": {
"match_all": {}
}
}
Lọc _source
Nếu _source
không được lưu trữ, thì chỉ trả về metadata của các tài liệu khớp
_source
hỗ trợ sử dụng ký tự đại diện, ví dụ: _source["name*", "desc*"]
Ví dụ:
GET /kibana_sample_data_ecommerce/_search?ignore_unavailable=true
{
"profile": "true",
"_source": [
"order_date",
"category.keyword"
],
"from": 1,
"size": 10,
"query": {
"match_all": {}
}
}
Trường script
GET /kibana_sample_data_ecommerce/_search?ignore_unavailable=true
{
"profile": "true",
"script_fields": {
"new_field": {
"script": {
"lang": "painless",
"source":"doc['order_date'].value+' hello'"
}
}
},
"from": 1,
"size": 10,
"query": {
"match_all": {}
}
}
Sử dụng biểu thức truy vấn - Match
POST movies/_search
{
"query": {
"match": {
"title": "last christmas"
}
}
}
POST movies/_search
{
"query": {
"match": {
"title": {
"query": "last christmas",
"operator": "and"
}
}
}
}
Tìm kiếm cụm từ - Match Phrase
POST movies/_search
{
"query": {
"match_phrase": {
"title":{
"query": "last christmas"
}
}
}
}
Cluster API
Một số API cấp cluster có thể được thực thi trên một tập con của các node, những node này có thể được chỉ định bằng bộ lọc node. Ví dụ, các API quản lý task, thống kê node và thông tin node đều có thể báo cáo kết quả từ một nhóm các node đã lọc thay vì tất cả các node.
Bộ lọc node được viết dưới dạng danh sách bộ lọc đơn lẻ được phân tách bằng dấu phẩy, mỗi bộ lọc thêm hoặc loại bỏ các node từ tập con đã chọn. Mỗi bộ lọc có thể là một trong những điều sau:
_all
: thêm tất cả các node vào tập con_local
: thêm node cục bộ vào tập con_master
: thêm node master hiện tại vào tập con- Thêm các node khớp theo ID node hoặc tên node vào tập con
- Thêm các node khớp theo địa chỉ IP hoặc tên máy chủ vào tập con
- Sử dụng ký tự đại diện, thêm các node có tên, tên địa chỉ hoặc tên máy chủ khớp vào tập con
master:true
,data:true
,ingest:true
,voting_only:true
,ml:true
hoặccoordinating_only:true
, tương ứng có nghĩa là thêm tất cả các node master, tất cả các node dữ liệu, tất cả các node ingest, tất cả các node chỉ bỏ phiếu, tất cả các node machine learning và tất cả các node điều phối vào tập con.master:false
,data:false
,ingest:false
,voting_only:true
,ml:false
hoặccoordinating_only:false
, tương ứng có nghĩa là loại trừ tất cả các node master, tất cả các node dữ liệu, tất cả các node ingest, tất cả các node chỉ bỏ phiếu, tất cả các node machine learning và tất cả các node điều phối ra khỏi tập con.- Mô hình ghép cặp, sử dụng ký tự đại diện
*
, theo dạngattrname:attrvalue
, thêm tất cả các node có thuộc tính node tùy chỉnh vào tập con, tên và giá trị của nó khớp với mô hình tương ứng. Thuộc tính node tùy chỉnh được thiết lập trong tệp cấu hình theo dạngnode.attr.attrname: attrvalue
.
# Nếu không có bộ lọc, mặc định là truy vấn tất cả các node
GET /_nodes
# Truy vấn tất cả các node
GET /_nodes/_all
# Truy vấn node cục bộ
GET /_nodes/_local
# Truy vấn node master
GET /_nodes/_master
# Truy vấn node theo tên (hỗ trợ ký tự đại diện)
GET /_nodes/node_name_goes_here
GET /_nodes/node_name_goes_*
# Truy vấn node theo địa chỉ (hỗ trợ ký tự đại diện)
GET /_nodes/10.0.0.3,10.0.0.4
GET /_nodes/10.0.0.*
# Truy vấn node theo quy tắc
GET /_nodes/_all,master:false
GET /_nodes/data:true,ingest:true
GET /_nodes/coordinating_only:true
GET /_nodes/master:true,voting_only:false
# Truy vấn node theo thuộc tính tùy chỉnh (ví dụ: truy vấn các node có thuộc tính node.attr.rack:2 trong tệp cấu hình)
GET /_nodes/rack:2
GET /_nodes/ra*:2
GET /_nodes/ra*:2*
Cluster Health API
GET /_cluster/health
GET /_cluster/health?level=shards
GET /_cluster/health/kibana_sample_data_ecommerce,kibana_sample_data_flights
GET /_cluster/health/kibana_sample_data_flights?level=shards
Cluster State API
Cluster State API trả về metadata biểu thị trạng thái toàn bộ cluster.
GET /_cluster/state
Nodes API
Elasticsearch Official cat Nodes API - Trả về thông tin về các node trong cluster.
# Xem các trường mặc định
GET /_cat/nodes?v=true
# Xem các trường chỉ định
GET /_cat/nodes?v=true&h=id,ip,port,v,m
Shards API
Elasticsearch Official cat Shards API - Lệnh shards cung cấp một cái nhìn chi tiết về shard nào thuộc về node nào. Nó sẽ cho bạn biết nó là primary hay replica, số lượng tài liệu, số byte mà nó chiếm trên đĩa và node mà nó đang nằm trên.
# Xem các trường mặc định
GET /_cat/shards
# Truy vấn shard theo tên (hỗ trợ ký tự đại diện)
GET /_cat/shards/my-index-*
# Xem các trường chỉ định
GET /_cat/shards?h=index,shard,prirep,state,unassigned.reason
Monitoring API
Trong Elasticsearch, các thông tin liên quan đến sức khỏe, thống kê, v.v. của cluster đều xoay quanh cat
API.
Bằng cách gửi yêu cầu GET đến cat, dưới đây là tất cả các API có sẵn:
GET /_cat
=^.^=
/_cat/allocation
/_cat/shards
/_cat/shards/{index}
/_cat/master
/_cat/nodes
/_cat/tasks
/_cat/indices
/_cat/indices/{index}
/_cat/segments
/_cat/segments/{index}
/_cat/count
/_cat/count/{index}
/_cat/recovery
/_cat/recovery/{index}
/_cat/health
/_cat/pending_tasks
/_cat/aliases
/_cat/aliases/{alias}
/_cat/thread_pool
/_cat/thread_pool/{thread_pools}
/_cat/plugins
/_cat/fielddata
/_cat/fielddata/{fields}
/_cat/nodeattrs
/_cat/repositories
/_cat/snapshots/{repository}
/_cat/templates