Elasticsearch - API tài liệu

Elasticsearch cung cấp các API tài liệu đơn và API đa tài liệu, nơi lệnh gọi API nhắm mục tiêu một tài liệu và nhiều tài liệu tương ứng.

API chỉ mục

Nó giúp thêm hoặc cập nhật tài liệu JSON trong một chỉ mục khi một yêu cầu được thực hiện đối với chỉ mục tương ứng đó với ánh xạ cụ thể. Ví dụ: yêu cầu sau sẽ thêm đối tượng JSON vào lập chỉ mục trường học và ánh xạ trường học -

PUT schools/_doc/5
{
   name":"City School", "description":"ICSE", "street":"West End",
   "city":"Meerut",
   "state":"UP", "zip":"250002", "location":[28.9926174, 77.692485],
   "fees":3500,
   "tags":["fully computerized"], "rating":"4.5"
}

Khi chạy đoạn mã trên, chúng tôi nhận được kết quả sau:

{
   "_index" : "schools",
   "_type" : "_doc",
   "_id" : "5",
   "_version" : 1,
   "result" : "created",
   "_shards" : {
      "total" : 2,
      "successful" : 1,
      "failed" : 0
   },
   "_seq_no" : 2,
   "_primary_term" : 1
}

Tạo chỉ mục tự động

Khi có yêu cầu thêm đối tượng JSON vào một chỉ mục cụ thể và nếu chỉ mục đó không tồn tại, thì API này sẽ tự động tạo chỉ mục đó và cũng là ánh xạ cơ bản cho đối tượng JSON cụ thể đó. Chức năng này có thể bị vô hiệu hóa bằng cách thay đổi các giá trị của các tham số sau thành false, có trong tệp tin đàn hồi.yml.

action.auto_create_index:false
index.mapper.dynamic:false

Bạn cũng có thể hạn chế việc tự động tạo chỉ mục, trong đó chỉ cho phép tên chỉ mục với các mẫu cụ thể bằng cách thay đổi giá trị của tham số sau:

action.auto_create_index:+acc*,-bank*

Note - Ở đây + biểu thị được phép và - biểu thị không được phép.

Phiên bản

Elasticsearch cũng cung cấp cơ sở kiểm soát phiên bản. Chúng ta có thể sử dụng tham số truy vấn phiên bản để chỉ định phiên bản của một tài liệu cụ thể.

PUT schools/_doc/5?version=7&version_type=external
{
   "name":"Central School", "description":"CBSE Affiliation", "street":"Nagan",
   "city":"paprola", "state":"HP", "zip":"176115", "location":[31.8955385, 76.8380405],
   "fees":2200, "tags":["Senior Secondary", "beautiful campus"], "rating":"3.3"
}

Khi chạy đoạn mã trên, chúng tôi nhận được kết quả sau:

{
   "_index" : "schools",
   "_type" : "_doc",
   "_id" : "5",
   "_version" : 7,
   "result" : "updated",
   "_shards" : {
      "total" : 2,
      "successful" : 1,
      "failed" : 0
   },
   "_seq_no" : 3,
   "_primary_term" : 1
}

Tạo phiên bản là một quá trình thời gian thực và nó không bị ảnh hưởng bởi các hoạt động tìm kiếm thời gian thực.

Có hai kiểu lập phiên bản quan trọng nhất -

Phiên bản nội bộ

Phiên bản nội bộ là phiên bản mặc định bắt đầu bằng 1 và tăng dần với mỗi bản cập nhật, xóa bao gồm.

Phiên bản bên ngoài

Nó được sử dụng khi phiên bản của tài liệu được lưu trữ trong một hệ thống bên ngoài như hệ thống lập phiên bản của bên thứ ba. Để kích hoạt chức năng này, chúng tôi cần đặt version_type thành bên ngoài. Tại đây Elasticsearch sẽ lưu trữ số phiên bản theo chỉ định của hệ thống bên ngoài và sẽ không tự động tăng chúng.

Loại hoạt động

Loại hoạt động được sử dụng để buộc một hoạt động tạo. Điều này giúp tránh ghi đè tài liệu hiện có.

PUT chapter/_doc/1?op_type=create
{
   "Text":"this is chapter one"
}

Khi chạy đoạn mã trên, chúng tôi nhận được kết quả sau:

{
   "_index" : "chapter",
   "_type" : "_doc",
   "_id" : "1",
   "_version" : 1,
   "result" : "created",
   "_shards" : {
      "total" : 2,
      "successful" : 1,
      "failed" : 0
   },
   "_seq_no" : 0,
   "_primary_term" : 1
}

Tạo ID tự động

Khi ID không được chỉ định trong thao tác lập chỉ mục, thì Elasticsearch sẽ tự động tạo id cho tài liệu đó.

POST chapter/_doc/
{
   "user" : "tpoint",
   "post_date" : "2018-12-25T14:12:12",
   "message" : "Elasticsearch Tutorial"
}

Khi chạy đoạn mã trên, chúng tôi nhận được kết quả sau:

{
   "_index" : "chapter",
   "_type" : "_doc",
   "_id" : "PVghWGoB7LiDTeV6LSGu",
   "_version" : 1,
   "result" : "created",
   "_shards" : {
      "total" : 2,
      "successful" : 1,
      "failed" : 0
   },
   "_seq_no" : 1,
   "_primary_term" : 1
}

Nhận API

API giúp trích xuất đối tượng JSON kiểu bằng cách thực hiện yêu cầu nhận đối với một tài liệu cụ thể.

pre class="prettyprint notranslate" > GET schools/_doc/5

Khi chạy đoạn mã trên, chúng tôi nhận được kết quả sau:

{
   "_index" : "schools",
   "_type" : "_doc",
   "_id" : "5",
   "_version" : 7,
   "_seq_no" : 3,
   "_primary_term" : 1,
   "found" : true,
   "_source" : {
      "name" : "Central School",
      "description" : "CBSE Affiliation",
      "street" : "Nagan",
      "city" : "paprola",
      "state" : "HP",
      "zip" : "176115",
      "location" : [
         31.8955385,
         76.8380405
      ],
      "fees" : 2200,
      "tags" : [
         "Senior Secondary",
         "beautiful campus"
      ],
      "rating" : "3.3"
   }
}
  • Hoạt động này là thời gian thực và không bị ảnh hưởng bởi tốc độ làm mới của Chỉ mục.

  • Bạn cũng có thể chỉ định phiên bản, sau đó Elasticsearch sẽ chỉ tìm nạp phiên bản tài liệu đó.

  • Bạn cũng có thể chỉ định _all trong yêu cầu, để Elasticsearch có thể tìm kiếm id tài liệu đó ở mọi loại và nó sẽ trả về tài liệu phù hợp đầu tiên.

  • Bạn cũng có thể chỉ định các trường bạn muốn trong kết quả của mình từ tài liệu cụ thể đó.

GET schools/_doc/5?_source_includes=name,fees

Khi chạy đoạn mã trên, chúng tôi nhận được kết quả sau:

{
   "_index" : "schools",
   "_type" : "_doc",
   "_id" : "5",
   "_version" : 7,
   "_seq_no" : 3,
   "_primary_term" : 1,
   "found" : true,
   "_source" : {
      "fees" : 2200,
      "name" : "Central School"
   }
}

Bạn cũng có thể tìm nạp phần nguồn trong kết quả của mình bằng cách thêm phần _source vào yêu cầu nhận của bạn.

GET schools/_doc/5?_source

Khi chạy đoạn mã trên, chúng tôi nhận được kết quả sau:

{
   "_index" : "schools",
   "_type" : "_doc",
   "_id" : "5",
   "_version" : 7,
   "_seq_no" : 3,
   "_primary_term" : 1,
   "found" : true,
   "_source" : {
      "name" : "Central School",
      "description" : "CBSE Affiliation",
      "street" : "Nagan",
      "city" : "paprola",
      "state" : "HP",
      "zip" : "176115",
      "location" : [
         31.8955385,
         76.8380405
      ],
      "fees" : 2200,
      "tags" : [
         "Senior Secondary",
         "beautiful campus"
      ],
      "rating" : "3.3"
   }
}

Bạn cũng có thể làm mới phân đoạn trước khi thực hiện thao tác nhận bằng cách đặt tham số làm mới thành true.

Xóa API

Bạn có thể xóa chỉ mục, ánh xạ hoặc tài liệu cụ thể bằng cách gửi yêu cầu HTTP DELETE tới Elasticsearch.

DELETE schools/_doc/4

Khi chạy đoạn mã trên, chúng tôi nhận được kết quả sau:

{
   "found":true, "_index":"schools", "_type":"school", "_id":"4", "_version":2,
   "_shards":{"total":2, "successful":1, "failed":0}
}

Phiên bản của tài liệu có thể được chỉ định để xóa phiên bản cụ thể đó. Tham số định tuyến có thể được chỉ định để xóa tài liệu khỏi một người dùng cụ thể và hoạt động không thành công nếu tài liệu không thuộc về người dùng cụ thể đó. Trong thao tác này, bạn có thể chỉ định tùy chọn làm mới và thời gian chờ giống như API GET.

Cập nhật API

Tập lệnh được sử dụng để thực hiện thao tác này và việc lập phiên bản được sử dụng để đảm bảo rằng không có cập nhật nào xảy ra trong quá trình lấy và lập chỉ mục lại. Ví dụ: bạn có thể cập nhật học phí của trường học bằng cách sử dụng script -

POST schools/_update/4
{
   "script" : {
      "source": "ctx._source.name = params.sname",
      "lang": "painless",
      "params" : {
         "sname" : "City Wise School"
      }
   }
 }

Khi chạy đoạn mã trên, chúng tôi nhận được kết quả sau:

{
   "_index" : "schools",
   "_type" : "_doc",
   "_id" : "4",
   "_version" : 3,
   "result" : "updated",
   "_shards" : {
      "total" : 2,
      "successful" : 1,
      "failed" : 0
   },
   "_seq_no" : 4,
   "_primary_term" : 2
}

Bạn có thể kiểm tra bản cập nhật bằng cách gửi yêu cầu đến tài liệu được cập nhật.