API dịch Elasticsearch SQL

Api Dich Elasticsearch Sql



Trong bài đăng này, chúng ta sẽ học cách dịch một tìm kiếm SQL thành một yêu cầu API tìm kiếm Elasticsearch hợp lệ chứa đầy đủ Ngôn ngữ cụ thể của miền truy vấn dựa trên JSON.

Mặc dù đây là một API nhỏ, nhưng nó là một công cụ rất có lợi, đặc biệt là đối với các nhà phát triển đến từ cơ sở dữ liệu SQL. Nó cũng có thể làm giảm đường cong học tập bằng cách nhanh chóng liên hệ các truy vấn SQL với các truy vấn tìm kiếm tương ứng.

Sau đó, bạn có thể khám phá toàn bộ khả năng của API tìm kiếm Elasticsearch và các ngôn ngữ truy vấn được hỗ trợ.







Cần lưu ý rằng mặc dù Elasticsearch hỗ trợ SQL nhưng nó có nhiều hạn chế khác nhau.



Cú pháp truy vấn

Phần sau cho thấy cú pháp của API dịch:



NHẬN _sql / dịch

{

request_body

}

Bạn cũng có thể gửi một yêu cầu đăng đến API dịch như được hiển thị trong cú pháp sau:





POST _sql / dịch

{

request_body

}

Tùy thuộc vào cấu hình cụm của bạn, API có thể yêu cầu đặc quyền đọc trên chỉ mục có dữ liệu mà bạn muốn truy vấn. Bạn cũng có thể chỉ định tài nguyên đích dưới dạng bí danh chỉ mục hoặc luồng dữ liệu.

Trong request_body, bạn có thể chỉ định tất cả các tham số nội dung yêu cầu API Tìm kiếm SQL. Khám phá các tài liệu được cung cấp trong tài nguyên sau để tìm hiểu thêm:



https://www.elastic.co/guide/en/elasticsearch/reference/current/sql-search-api.html#sql-search-api-request-body

Như một phản hồi, truy vấn sẽ trả về kết quả tương ứng với API tìm kiếm với dữ liệu được truy vấn.

Thí dụ

Để minh họa rõ nhất cách sử dụng API này, chúng tôi sẽ giả sử chúng tôi có một chỉ mục có tên “netflix” chứa tất cả dữ liệu về phim và Chương trình truyền hình Netflix.

Giả sử chúng tôi muốn tìm nạp năm bộ phim hàng đầu từ chỉ mục Netflix mà chúng tôi đã phát hành vào năm 2020 trở lên:

Truy vấn SQL tương đương có thể được thể hiện như hình dưới đây:

CHỌN tiêu đề, thời lượng, xếp hạng, loại FROM netflix WHERE loại = 'Bộ phim' AND release_year> = Năm 2020

Để thực hiện tìm kiếm SQL ở trên trong Elasticsearch, chúng ta có thể đặt nó vào API Tìm kiếm SQL như hình dưới đây:

cuộn tròn -XGET “http://localhost:9200/_sql?format=txt” -H 'kbn-xsrf: báo cáo' -H 'Content-Type: application / json' -d '

{

'truy vấn': ' \N CHỌN tiêu đề, thời lượng, xếp hạng, loại TỪ 'netflix' WHERE loại = '
\ '' Bộ phim ' \ ' ' AND release_year> = Năm 2020 \N ',

'
fetch_size ': 5

} '

Yêu cầu trước đó sẽ truy vấn chỉ mục và tìm nạp các bản ghi phù hợp. Kết quả trả về có định dạng văn bản như được cung cấp bên dưới:

Như chúng ta có thể thấy, Elasticsearch trả về kết quả đầu ra mong đợi.

Để trả về đầu ra là JSON, chúng ta có thể đặt định dạng thành JSON như hình dưới đây:

cuộn tròn -XGET 'http://localhost:9200/_sql?format=json' -H 'kbn-xsrf: báo cáo' -H 'Content-Type: application / json' -d '

{

'truy vấn': ' \N CHỌN tiêu đề, thời lượng, xếp hạng, loại TỪ 'netflix' WHERE loại = '
\ '' Bộ phim ' \ ' ' AND release_year> = Năm 2020 \N ',

'
fetch_size ': 5

} '

Đầu ra:

Chuyển đổi truy vấn SQL thành yêu cầu tìm kiếm

Để chuyển đổi truy vấn tìm kiếm SQL trước đó thành một yêu cầu Elasticsearch, chúng tôi có thể chuyển nó vào API dịch như hình dưới đây:

cuộn tròn -XGET 'http://localhost:9200/_sql/translate' -H 'kbn-xsrf: báo cáo' -H 'Content-Type: application / json' -d '

{

'truy vấn': ' \N CHỌN tiêu đề, thời lượng, xếp hạng, loại TỪ 'netflix' WHERE loại = '
\ '' Bộ phim ' \ ' ' AND release_year> = Năm 2020 \N ',

'
fetch_size ': 5

} '

API phải phân tích cú pháp đầu vào SQL đầu vào và chuyển đổi nó thành một yêu cầu tìm kiếm hợp lệ, như được hiển thị trong đầu ra sau:

{
'kích thước' : 5 ,
'truy vấn' : {
'bool' : {
'phải' : [
{
'kỳ hạn' : {
'loại hình' : {
'giá trị' : 'Bộ phim'
}
}
},
{
'phạm vi' : {
'năm phát hành' : {
'gte' : Năm 2020 ,
'tăng' : 1
}
}
}
],
'tăng' : 1
}
},
'_nguồn' : sai,
'lĩnh vực' : [
{
'đồng ruộng' : 'Tiêu đề'
},
{
'đồng ruộng' : 'khoảng thời gian'
},
{
'đồng ruộng' : 'Xếp hạng'
},
{
'đồng ruộng' : 'loại hình'
}
],
'loại' : [
{
'_doc' : {
'gọi món' : 'Tăng dần'
}
}
]
}

Sau đó, bạn có thể sử dụng định dạng yêu cầu này để gửi đến API tìm kiếm Elasticsearch như được hiển thị bên dưới:

cuộn tròn -XPOST 'http://localhost:9200/netflix/_search' -H 'kbn-xsrf: báo cáo' -H 'Content-Type: application / json' -d '
{
'kích thước': 5,
'truy vấn': {
'bool': {
'phải': [
{
'kỳ hạn': {
'loại hình': {
'value': 'Phim'
}
}
},
{
'phạm vi': {
'năm phát hành': {
'gte': 2020,
'tăng cường': 1
}
}
}
],
'tăng cường': 1
}
},
'_source': false,
'lĩnh vực': [
{
'field': 'title'
},
{
'trường': 'thời lượng'
},
{
'field': 'xếp hạng'
},
{
'Loại lĩnh vực'
}
],
'loại': [
{
'_doc': {
'order': 'asc'
}
}
]
} '

Tương tự, yêu cầu sẽ trả về dữ liệu tương tự như được hiển thị bên dưới:

Sự kết luận

Qua bài đăng này, bạn đã khám phá cách sử dụng truy vấn SQL để tìm nạp dữ liệu từ chỉ mục Elasticsearch hiện có. Bạn cũng đã học cách sử dụng API dịch SQL để chuyển đổi một truy vấn SQL hợp lệ thành một yêu cầu Elasticsearch.