Elasticsearch 文檔API

Elasticsearch提供了單文檔API和多文檔API,其中API調(diào)用分別針對(duì)單個(gè)文檔和多個(gè)文檔。

索引API

當(dāng)對(duì)具有特定映射的相應(yīng)索引進(jìn)行請(qǐng)求時(shí),它有助于在索引中添加或更新JSON文檔。例如,以下請(qǐng)求會(huì)將JSON對(duì)象添加到索引學(xué)校和學(xué)校映射下-

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

在運(yùn)行上面的代碼時(shí),我們得到以下結(jié)果-

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

自動(dòng)索引創(chuàng)建

當(dāng)請(qǐng)求將JSON對(duì)象添加到特定索引時(shí),如果該索引不存在,則此API會(huì)自動(dòng)創(chuàng)建該索引以及該特定JSON對(duì)象的基礎(chǔ)映射??梢酝ㄟ^將elasticsearch.yml文件中存在的以下參數(shù)的值更改為false來禁用此功能。

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

您還可以限制索引的自動(dòng)創(chuàng)建,通過更改以下參數(shù)的值,只允許使用具有特定模式的索引名稱-

action.auto_create_index:+acc*,-bank*

注意:此處 + 表示允許,而 – 表示不允許。

版本控制

Elasticsearch還提供了版本控制工具。我們可以使用版本查詢參數(shù)來指定特定文檔的版本。

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

在運(yùn)行上面的代碼時(shí),我們得到以下結(jié)果-

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

版本控制是一個(gè)實(shí)時(shí)過程,不受實(shí)時(shí)搜索操作的影響。

有兩種最重要的版本控制類型-

內(nèi)部版本控制

內(nèi)部版本控制是默認(rèn)版本,從1開始,并隨著每次更新(包括刪除)而遞增。

外部版本控制

當(dāng)文檔的版本控制存儲(chǔ)在外部系統(tǒng)(如第三方版本控制系統(tǒng))中時(shí),將使用此功能。要啟用此功能,我們需要將version_type設(shè)置為external。在這里,Elasticsearch將存儲(chǔ)外部系統(tǒng)指定的版本號(hào),并且不會(huì)自動(dòng)對(duì)其進(jìn)行遞增。

操作類型

操作類型用于強(qiáng)制執(zhí)行創(chuàng)建操作。這有助于避免覆蓋現(xiàn)有文檔。

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

在運(yùn)行上面的代碼時(shí),我們得到以下結(jié)果-

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

自動(dòng)ID生成

如果在索引操作中未指定ID,則Elasticsearch會(huì)自動(dòng)為該文檔生成ID。

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

在運(yùn)行上面的代碼時(shí),我們得到以下結(jié)果-

{
   "_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通過對(duì)特定文檔執(zhí)行g(shù)et請(qǐng)求來幫助提取類型JSON對(duì)象。

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

在運(yùn)行上面的代碼時(shí),我們得到以下結(jié)果-

{
   "_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"
   }
}
  • 此操作是實(shí)時(shí)的,不受索引刷新率的影響。

  • 您還可以指定版本,然后Elasticsearch將僅獲取該文檔的版本。

  • 您還可以在請(qǐng)求中指定_all,以便Elasticsearch可以按每種類型搜索該文檔ID,它將返回第一個(gè)匹配的文檔。

  • 您還可以在特定文檔的結(jié)果中指定所需的字段。

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

在運(yùn)行上面的代碼時(shí),我們得到以下結(jié)果-

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

您還可以通過在get請(qǐng)求中添加_source部分來獲取結(jié)果中的源部分。

GET schools/_doc/5?_source

在運(yùn)行上面的代碼時(shí),我們得到以下結(jié)果-

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

您還可以通過將refresh參數(shù)設(shè)置為true來刷新分片,然后再執(zhí)行g(shù)et操作。

刪除API

您可以通過向Elasticsearch發(fā)送HTTP DELETE請(qǐng)求來刪除特定的索引,映射或文檔。

DELETE schools/_doc/4

在運(yùn)行上面的代碼時(shí),我們得到以下結(jié)果-

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

可以指定文檔的版本以刪除該特定版本??梢灾付酚蓞?shù)以從特定用戶刪除文檔,并且如果文檔不屬于該特定用戶,則操作將失敗。在此操作中,您可以像GET API一樣指定刷新和超時(shí)選項(xiàng)。

更新API

腳本用于執(zhí)行此操作,版本控制用于確保在獲取和重新編制索引期間未發(fā)生任何更新。例如,您可以使用腳本更新學(xué)費(fèi)-

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

在運(yùn)行上面的代碼時(shí),我們得到以下結(jié)果-

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

您可以通過向更新的文檔發(fā)送獲取請(qǐng)求來檢查更新。

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清