Elasticsearch - Quy ước API

Giao diện lập trình ứng dụng (API) trong web là một nhóm các lệnh gọi hàm hoặc các hướng dẫn lập trình khác để truy cập thành phần phần mềm trong ứng dụng web cụ thể đó. Ví dụ, Facebook API giúp nhà phát triển tạo ứng dụng bằng cách truy cập dữ liệu hoặc các chức năng khác từ Facebook; nó có thể là ngày sinh hoặc cập nhật trạng thái.

Elasticsearch cung cấp API REST, được JSON truy cập qua HTTP. Elasticsearch sử dụng một số quy ước mà chúng ta sẽ thảo luận ngay bây giờ.

Nhiều chỉ số

Hầu hết các hoạt động, chủ yếu là tìm kiếm và các hoạt động khác, trong API dành cho một hoặc nhiều chỉ số. Điều này giúp người dùng tìm kiếm ở nhiều nơi hoặc tất cả dữ liệu có sẵn bằng cách chỉ thực hiện truy vấn một lần. Nhiều ký hiệu khác nhau được sử dụng để thực hiện các hoạt động trong nhiều chỉ số. Chúng ta sẽ thảo luận một vài trong số chúng ở đây trong chương này.

Ký hiệu được phân tách bằng dấu phẩy

POST /index1,index2,index3/_search

Nội dung yêu cầu

{
   "query":{
      "query_string":{
         "query":"any_string"
      }
   }
}

Phản ứng

Các đối tượng JSON từ index1, index2, index3 có any_string trong đó.

_tất cả từ khóa cho tất cả chỉ số

POST /_all/_search

Nội dung yêu cầu

{
   "query":{
      "query_string":{
         "query":"any_string"
      }
   }
}

Phản ứng

Các đối tượng JSON từ tất cả các chỉ mục và có any_string trong đó.

Các ký tự đại diện (*, +, -)

POST /school*/_search

Nội dung yêu cầu

{
   "query":{
      "query_string":{
         "query":"CBSE"
      }
   }
}

Phản ứng

Các đối tượng JSON từ tất cả các chỉ số bắt đầu với trường học có CBSE trong đó.

Ngoài ra, bạn cũng có thể sử dụng mã sau:

POST /school*,-schools_gov /_search

Nội dung yêu cầu

{
   "query":{
      "query_string":{
         "query":"CBSE"
      }
   }
}

Phản ứng

Các đối tượng JSON từ tất cả các chỉ số bắt đầu bằng “school” chứ không phải từ school_gov và có CBSE trong đó.

Ngoài ra còn có một số tham số chuỗi truy vấn URL -

  • ignore_unavailable- Không xảy ra lỗi hoặc không có hoạt động nào bị dừng, nếu một hoặc nhiều chỉ mục có trong URL không tồn tại. Ví dụ: chỉ mục trường học tồn tại, nhưng hiệu sách không tồn tại.

POST /school*,book_shops/_search

Nội dung yêu cầu

{
   "query":{
      "query_string":{
         "query":"CBSE"
      }
   }
}

Nội dung yêu cầu

{
   "error":{
      "root_cause":[{
         "type":"index_not_found_exception", "reason":"no such index",
         "resource.type":"index_or_alias", "resource.id":"book_shops",
         "index":"book_shops"
      }],
      "type":"index_not_found_exception", "reason":"no such index",
      "resource.type":"index_or_alias", "resource.id":"book_shops",
      "index":"book_shops"
   },"status":404
}

Hãy xem xét đoạn mã sau:

POST /school*,book_shops/_search?ignore_unavailable = true

Nội dung yêu cầu

{
   "query":{
      "query_string":{
         "query":"CBSE"
      }
   }
}

Phản hồi (không có lỗi)

Các đối tượng JSON từ tất cả các chỉ số bắt đầu với trường học có CBSE trong đó.

allow_no_indices

truegiá trị của thông số này sẽ ngăn lỗi, nếu URL có ký tự đại diện dẫn đến không có chỉ số. Ví dụ: không có chỉ mục nào bắt đầu bằng school_pri -

POST /schools_pri*/_search?allow_no_indices = true

Nội dung yêu cầu

{
   "query":{
      "match_all":{}
   }
}

Phản hồi (Không có lỗi)

{
   "took":1,"timed_out": false, "_shards":{"total":0, "successful":0, "failed":0},
   "hits":{"total":0, "max_score":0.0, "hits":[]}
}

expand_wildcards

Tham số này quyết định xem các ký tự đại diện cần được mở rộng cho các chỉ số mở hoặc chỉ số đóng hoặc thực hiện cả hai. Giá trị của tham số này có thể mở và đóng hoặc không có và tất cả.

Ví dụ: đóng các trường chỉ mục -

POST /schools/_close

Phản ứng

{"acknowledged":true}

Hãy xem xét đoạn mã sau:

POST /school*/_search?expand_wildcards = closed

Nội dung yêu cầu

{
   "query":{
      "match_all":{}
   }
}

Phản ứng

{
   "error":{
      "root_cause":[{
         "type":"index_closed_exception", "reason":"closed", "index":"schools"
      }],
      "type":"index_closed_exception", "reason":"closed", "index":"schools"
   }, "status":403
}

Hỗ trợ toán ngày trong tên chỉ mục

Elasticsearch cung cấp chức năng tìm kiếm các chỉ mục theo ngày và giờ. Chúng ta cần chỉ định ngày và giờ theo một định dạng cụ thể. Ví dụ: accountdetail-2015.12.30, chỉ mục sẽ lưu trữ chi tiết tài khoản ngân hàng của ngày 30 tháng 12 năm 2015. Có thể thực hiện các phép toán để lấy chi tiết cho một ngày cụ thể hoặc một phạm vi ngày và giờ.

Định dạng cho tên chỉ mục toán học ngày -

<static_name{date_math_expr{date_format|time_zone}}>
/<accountdetail-{now-2d{YYYY.MM.dd|utc}}>/_search

static_name là một phần của biểu thức được giữ nguyên trong mọi chỉ mục toán học ngày như chi tiết tài khoản. date_math_expr chứa biểu thức toán học xác định ngày và giờ động như now-2d. date_format chứa định dạng trong đó ngày được viết trong chỉ mục như YYYY.MM.dd. Nếu ngày hôm nay là ngày 30 tháng 12 năm 2015, thì <accountdetail- {now-2d {YYYY.MM.dd}}> sẽ trả về accountdetail-2015.12.28.

Biểu hiện Giải quyết cho
<accountdetail- {now-d}> accountdetail-2015.12.29
<accountdetail- {now-M}> accountdetail-2015.11.30
<accountdetail- {now {YYYY.MM}}> accountdetail-2015.12

Bây giờ chúng ta sẽ thấy một số tùy chọn phổ biến có sẵn trong Elasticsearch có thể được sử dụng để nhận phản hồi ở định dạng được chỉ định.

Kết quả khá

Chúng ta có thể nhận được phản hồi trong một đối tượng JSON được định dạng tốt bằng cách thêm một tham số truy vấn URL, tức là khá = true.

POST /schools/_search?pretty = true

Nội dung yêu cầu

{
   "query":{
      "match_all":{}
   }
}

Phản ứng

……………………..
{
   "_index" : "schools", "_type" : "school", "_id" : "1", "_score" : 1.0,
   "_source":{
      "name":"Central School", "description":"CBSE Affiliation",
      "street":"Nagan", "city":"paprola", "state":"HP", "zip":"176115",
      "location": [31.8955385, 76.8380405], "fees":2000,
      "tags":["Senior Secondary", "beautiful campus"], "rating":"3.5"
   }
}
………………….

Đầu ra có thể đọc được của con người

Tùy chọn này có thể thay đổi các phản hồi thống kê thành dạng con người có thể đọc được (Nếu con người = true) hoặc dạng máy tính có thể đọc được (nếu con người = sai). Ví dụ: nếu human = true thì distance_kilometer = 20KM và nếu human = false thì distance_meter = 20000, khi phản hồi cần được sử dụng bởi một chương trình máy tính khác.

Lọc phản hồi

Chúng ta có thể lọc phản hồi cho ít trường hơn bằng cách thêm chúng vào tham số field_path. Ví dụ,

POST /schools/_search?filter_path = hits.total

Nội dung yêu cầu

{
   "query":{
      "match_all":{}
   }
}

Phản ứng

{"hits":{"total":3}}