Elasticsearch - API เอกสาร

Elasticsearch มี API เอกสารเดียวและ API หลายเอกสารโดยที่การเรียก API กำหนดเป้าหมายเอกสารเดียวและหลายเอกสารตามลำดับ

Index API

ช่วยเพิ่มหรืออัปเดตเอกสาร JSON ในดัชนีเมื่อมีการร้องขอไปยังดัชนีที่เกี่ยวข้องด้วยการแมปเฉพาะ ตัวอย่างเช่นคำขอต่อไปนี้จะเพิ่มออบเจ็กต์ JSON เพื่อจัดทำดัชนีโรงเรียนและภายใต้การทำแผนที่โรงเรียน -

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"
}

ในการรันโค้ดด้านบนเราจะได้ผลลัพธ์ดังต่อไปนี้ -

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

การสร้างดัชนีอัตโนมัติ

เมื่อมีการร้องขอให้เพิ่มออบเจ็กต์ JSON ลงในดัชนีเฉพาะและหากไม่มีดัชนีนั้น API นี้จะสร้างดัชนีนั้นโดยอัตโนมัติและการแมปพื้นฐานสำหรับออบเจ็กต์ JSON นั้นโดยอัตโนมัติ ฟังก์ชันนี้สามารถปิดใช้งานได้โดยเปลี่ยนค่าของพารามิเตอร์ต่อไปนี้เป็น false ซึ่งมีอยู่ในไฟล์ elasticsearch.yml

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

คุณยังสามารถ จำกัด การสร้างดัชนีโดยอัตโนมัติซึ่งอนุญาตให้ใช้เฉพาะชื่อดัชนีที่มีรูปแบบเฉพาะเท่านั้นโดยการเปลี่ยนค่าของพารามิเตอร์ต่อไปนี้ -

action.auto_create_index:+acc*,-bank*

Note - ที่นี่ + แสดงว่าอนุญาตและ - แสดงว่าไม่อนุญาต

การกำหนดเวอร์ชัน

Elasticsearch ยังมีสิ่งอำนวยความสะดวกในการควบคุมเวอร์ชัน เราสามารถใช้พารามิเตอร์เคียวรีเวอร์ชันเพื่อระบุเวอร์ชันของเอกสารเฉพาะ

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"
}

ในการรันโค้ดด้านบนเราจะได้ผลลัพธ์ดังต่อไปนี้ -

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

การกำหนดเวอร์ชันเป็นกระบวนการแบบเรียลไทม์และไม่ได้รับผลกระทบจากการดำเนินการค้นหาแบบเรียลไทม์

การกำหนดเวอร์ชันที่สำคัญที่สุดมีสองประเภท -

การกำหนดเวอร์ชันภายใน

การกำหนดเวอร์ชันภายในเป็นเวอร์ชันเริ่มต้นที่เริ่มต้นด้วย 1 และเพิ่มขึ้นในการอัปเดตแต่ละครั้งรวมทั้งลบ

การกำหนดเวอร์ชันภายนอก

ใช้เมื่อการกำหนดเวอร์ชันของเอกสารถูกเก็บไว้ในระบบภายนอกเช่นระบบการกำหนดเวอร์ชันของบุคคลที่สาม ในการเปิดใช้งานฟังก์ชันนี้เราจำเป็นต้องตั้งค่า version_type เป็นภายนอก ที่นี่ Elasticsearch จะจัดเก็บหมายเลขเวอร์ชันตามที่ระบบภายนอกกำหนดและจะไม่เพิ่มขึ้นโดยอัตโนมัติ

ประเภทการทำงาน

ประเภทการดำเนินการใช้เพื่อบังคับให้สร้างการดำเนินการ ซึ่งจะช่วยหลีกเลี่ยงการเขียนทับเอกสารที่มีอยู่

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

ในการรันโค้ดด้านบนเราจะได้ผลลัพธ์ดังต่อไปนี้ -

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

การสร้าง ID อัตโนมัติ

เมื่อไม่ได้ระบุ ID ในการดำเนินการดัชนี Elasticsearch จะสร้าง id สำหรับเอกสารนั้นโดยอัตโนมัติ

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

ในการรันโค้ดด้านบนเราจะได้ผลลัพธ์ดังต่อไปนี้ -

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

รับ API

API ช่วยในการแยกออบเจ็กต์ JSON ประเภทโดยดำเนินการขอเอกสารเฉพาะ

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

ในการรันโค้ดด้านบนเราจะได้ผลลัพธ์ดังต่อไปนี้ -

{
   "_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"
   }
}
  • การดำเนินการนี้เป็นแบบเรียลไทม์และไม่ได้รับผลกระทบจากอัตราการรีเฟรชของดัชนี

  • คุณยังสามารถระบุเวอร์ชันจากนั้น Elasticsearch จะดึงเอกสารเวอร์ชันนั้นเท่านั้น

  • คุณยังสามารถระบุ _all ในคำขอเพื่อให้ Elasticsearch ค้นหารหัสเอกสารนั้นได้ในทุกประเภทและจะส่งคืนเอกสารที่ตรงกันรายการแรก

  • คุณยังสามารถระบุฟิลด์ที่คุณต้องการในผลลัพธ์ของคุณจากเอกสารนั้น ๆ

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

ในการรันโค้ดด้านบนเราจะได้ผลลัพธ์ดังต่อไปนี้ -

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

คุณยังสามารถดึงส่วนที่มาในผลลัพธ์ของคุณได้โดยเพิ่มส่วน _source ในคำขอรับของคุณ

GET schools/_doc/5?_source

ในการรันโค้ดด้านบนเราจะได้ผลลัพธ์ดังต่อไปนี้ -

{
   "_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"
   }
}

คุณยังสามารถรีเฟรชชาร์ดก่อนดำเนินการรับโดยตั้งค่าพารามิเตอร์รีเฟรชเป็นจริง

ลบ API

คุณสามารถลบดัชนีการแมปหรือเอกสารโดยการส่งคำร้องขอ HTTP DELETE ไปยัง Elasticsearch

DELETE schools/_doc/4

ในการรันโค้ดด้านบนเราจะได้ผลลัพธ์ดังต่อไปนี้ -

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

สามารถระบุเวอร์ชันของเอกสารเพื่อลบเวอร์ชันนั้น ๆ สามารถระบุพารามิเตอร์การกำหนดเส้นทางเพื่อลบเอกสารจากผู้ใช้เฉพาะและการดำเนินการจะล้มเหลวหากเอกสารไม่ได้เป็นของผู้ใช้รายนั้น ในการดำเนินการนี้คุณสามารถระบุตัวเลือกการรีเฟรชและการหมดเวลาเหมือนกับ GET API

อัปเดต API

สคริปต์ใช้สำหรับการดำเนินการนี้และใช้การกำหนดเวอร์ชันเพื่อให้แน่ใจว่าไม่มีการอัพเดตเกิดขึ้นระหว่างการรับและจัดทำดัชนีใหม่ ตัวอย่างเช่นคุณสามารถอัปเดตค่าธรรมเนียมของโรงเรียนโดยใช้สคริปต์ -

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

ในการรันโค้ดด้านบนเราจะได้ผลลัพธ์ดังต่อไปนี้ -

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

คุณสามารถตรวจสอบการอัปเดตได้โดยส่งคำขอรับไปยังเอกสารที่อัปเดต