鍍金池/ 教程/ Java/ Elasticsearch文檔API
Elasticsearch搜索API
Elasticsearch教程
Elasticsearch填充
Elasticsearch測(cè)試
Elasticsearch分析
Elasticsearch映射
Elasticsearch入門教程
Elasticsearch版本之間遷移
Elasticsearch集群API
Elasticsearch模塊
Elasticsearch環(huán)境安裝配置
Elasticsearch聚合
Elasticsearch查詢DSL
Elasticsearch索引API
Elasticsearch API約定
Elasticsearch文檔API

Elasticsearch文檔API

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

索引API

當(dāng)使用特定映射對(duì)相應(yīng)索引發(fā)出請(qǐng)求時(shí),它有助于在索引中添加或更新JSON文檔。 例如,以下請(qǐng)求將JSON對(duì)象添加到索引學(xué)校和學(xué)校映射下。

POST http://localhost:9200/schools/school/4

請(qǐng)求正文

{
   "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īng)

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

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

當(dāng)請(qǐng)求將JSON對(duì)象添加到特定索引時(shí),如果該索引不存在,那么此API會(huì)自動(dòng)創(chuàng)建該索引以及該特定JSON對(duì)象的基礎(chǔ)映射。 可以通過將以下參數(shù)的值更改為false來(lái)禁用此功能,這個(gè)值是存在于elasticsearch.yml文件中,打開elasticsearch.yml文件設(shè)置如下 。

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

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

action.auto_create_index:+acc*,-bank*

(其中+表示允許, - 表示不允許)

版本控制

Elasticsearch還提供版本控制功能。我們可以使用版本查詢參數(shù)指定特定文檔的版本。 例如,

POST http://localhost:9200/schools/school/1?version = 1

請(qǐng)求正文

{
   "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īng)內(nèi)容

{
   "_index":"schools", "_type":"school", "_id":"1", "_version":2,
   "_shards":{"total":2, "successful":1,"failed":0}, "created":false
}

有兩種最重要的版本控制類型: 內(nèi)部版本控制是以1開頭的默認(rèn)版本,每次更新都會(huì)增加,包括刪除。版本號(hào)可以在外部設(shè)置。要啟用此功能,我們需要將version_type設(shè)置為external

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

操作類型

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

POST http://localhost:9200/tutorials/chapter/1?op_type = create

請(qǐng)求正文

{
   "Text":"this is chapter one"
}

響應(yīng)內(nèi)容

{
   "_index":"tutorials", "_type":"chapter", "_id":"1", "_version":1,
   "_shards":{"total":2, "successful":1, "failed":0}, "created":true
}

自動(dòng)生成ID

當(dāng)在索引操作中未指定ID時(shí),Elasticsearch自動(dòng)為文檔生成ID

父級(jí)和子級(jí)

可以通過在父URL查詢參數(shù)中傳遞父文檔的ID來(lái)定義任何文檔的父級(jí)。

POST http://localhost:9200/tutorials/article/1?parent = 1

請(qǐng)求正文

{
   "Text":"This is article 1 of chapter 1"
}

注意 - 如果在執(zhí)行此示例時(shí)遇到異常,請(qǐng)通過在索引中添加以下內(nèi)容來(lái)重新創(chuàng)建索引。

{
   "mappings": {
      "chapter": {},
      "article": {
         "_parent": {
            "type": "chapter"
         }
      }
   }
}

超時(shí)

默認(rèn)情況下,索引操作將在主分片上最多等待1分鐘,超過后就會(huì)失敗并響應(yīng)錯(cuò)誤。 可以通過將值傳遞給timeout參數(shù)來(lái)顯式更改這個(gè)超時(shí)值。

POST http://localhost:9200/tutorials/chapter/2?timeout = 3m

請(qǐng)求正文

{
   "Text":"This is chapter 2 waiting for primary shard for 3 minutes"
}

獲取API

API通過對(duì)特定文檔執(zhí)行get請(qǐng)求來(lái)幫助提取JSON對(duì)象。 例如,

GET http://localhost:9200/schools/school/1

響應(yīng)

{
   "_index":"schools", "_type":"school", "_id":"1", "_version":2,
   "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"
   }
}
  • 這個(gè)操作是實(shí)時(shí)的,不受索引刷新率的影響。
  • 還可以指定版本,然后Elasticsearch將僅提取該版本的文檔。
  • 還可以在請(qǐng)求中指定_all,以便Elasticsearch可以在每種類型中搜索該文檔ID,并且它將返回第一個(gè)匹配的文檔。
  • 還可以從該特定文檔的結(jié)果中指定所需的字段。
GET http://localhost:9200/schools/school/1?fields = name,fees

響應(yīng)

……………………..
"fields":{
   "name":["Central School"], "fees":[2200]
}
……………………..

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

GET http://localhost:9200/schools/school/1/_source

響應(yīng)

{
   "name":"Central School", "description":"CBSE Afiliation", "street":"Nagan",
   "city":"paprola", "state":"HP", "zip":"176115", "location":[31.8955385, 76.8380405],
   "fees":2200, "tags":["Senior Secondary", "beatiful campus"], "rating":"3.3"
}

還可以在通過將 refresh 參數(shù)設(shè)置為true進(jìn)行get操作之前刷新碎片。

刪除API

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

DELETE http://localhost:9200/schools/school/4

響應(yīng)

{
   "found":true, "_index":"schools", "_type":"school", "_id":"4", "_version":2,
   "_shards":{"total":2, "successful":1, "failed":0}
}
  • 可以指定文檔的版本以刪除指定的版本。
  • 可以指定路由參數(shù)以刪除指定用戶的文檔,如果文檔不屬于該特定用戶,則操作將失敗。
  • 在此操作中,可以像GET API那樣指定刷新(refresh)和超時(shí)(timeout)選項(xiàng)。

更新API

腳本用于執(zhí)行此操作,版本控制用于確保在獲取和重建索引期間沒有發(fā)生更新。 例如,使用下面腳本更新學(xué)校的費(fèi)用 -

POST http://localhost:9200/schools_gov/school/1/_update

請(qǐng)求正文

{
   "script":{
      "inline": "ctx._source.fees+ = inc", "params":{
         "inc": 500
      }
   }
}

響應(yīng)結(jié)果

{
   "_index":"schools_gov", "_type":"school", "_id":"1", "_version":2,
   "_shards":{"total":2, "successful":1, "failed":0}
}

注意 - 如果獲取腳本異常,建議在elastcisearch.yml中添加以下行

script.inline: on
script.indexed: on

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

GET http://localhost:9200/schools_gov/school/1

多獲取API

它具有相同的功能,如GET API,但此get請(qǐng)求可以返回多個(gè)文檔。使用doc數(shù)組來(lái)指定需要提取的所有文檔的索引,類型和ID。

POST http://localhost:9200/_mget

請(qǐng)求正文

{
   "docs":[
      {
         "_index": "schools", "_type": "school", "_id": "1"
      },

      {
         "_index":"schools_gev", "_type":"school", "_id": "2"
      }
   ]
}

響應(yīng)結(jié)果

{
   "docs":[
      {
         "_index":"schools", "_type":"school", "_id":"1",
         "_version":1, "found":true, "_source":{
            "name":"Central School", "description":"CBSE Afiliation",
            "street":"Nagan", "city":"paprola", "state":"HP", "zip":"176115",
            "location":[31.8955385,76.8380405], "fees":2000, 
            "tags":["Senior Secondary", "beatiful campus"], "rating":"3.5"
         }
      },

      {
         "_index":"schools_gev", "_type":"school", "_id":"2", "error":{

            "root_cause":[{
               "type":"index_not_found_exception", "reason":"no such index", 
               "index":"schools_gev"
            }],

            "type":"index_not_found_exception", "reason":"no such index", 
            "index":"schools_gev"
         }
      }
   ]
}

批量API

此API用于通過在單個(gè)請(qǐng)求中進(jìn)行多個(gè)索引/刪除操作來(lái)批量上傳或刪除JSON對(duì)象。 需要添加“_bulk”關(guān)鍵字來(lái)調(diào)用此API。此API的示例已在Elasticsearch填充文章中執(zhí)行。所有其他功能與GET API相同。