Elasticsearch 參考指南(修改你的數據)

修改你的數據

Elasticsearch幾乎實時提供數據操做和搜索功能,默認狀況下,從索引/更新/刪除數據到搜索結果中顯示的時間,你能夠得到一秒鐘的延遲(刷新間隔),這是與SQL等其餘平臺的重要區別,其中數據在事務完成後當即可用。html

索引/替換文檔

咱們以前已經看到了如何索引單個文檔,讓咱們再次回想一下這個命令:segmentfault

PUT /customer/_doc/1?pretty
{
  "name": "John Doe"
}

一樣,上面將指定的文檔索引到customer索引中,ID爲1。若是咱們再使用不一樣(或相同)的文檔再次執行上述命令,Elasticsearch將在ID爲1的現有文檔之上替換(即從新索引)新文檔:網絡

PUT /customer/_doc/1?pretty
{
  "name": "Jane Doe"
}

以上內容將ID爲1的文檔名稱從「John Doe」更改成「Jane Doe」,另外一方面,若是咱們使用不一樣的ID,則會對新文檔索引,而且索引中已有的現有文檔保持不變。elasticsearch

PUT /customer/_doc/2?pretty
{
  "name": "Jane Doe"
}

以上索引ID爲2的新文檔。ide

索引時,ID部分是可選的,若是未指定,Elasticsearch將生成隨機ID,而後使用它來索引文檔,Elasticsearch生成的實際ID(或前面示例中顯式指定的內容)將做爲索引API調用的一部分返回。ui

此示例顯示如何在沒有顯式ID的狀況下索引文檔:code

POST /customer/_doc?pretty
{
  "name": "Jane Doe"
}

請注意,在上述狀況下,咱們使用POST動詞而不是PUT,由於咱們沒有指定ID。htm

更新文檔

除了可以索引和替換文檔,咱們還能夠更新文檔,請注意,Elasticsearch實際上並無在內部進行就地更新,每當咱們進行更新時,Elasticsearch都會刪除舊文檔,而後一次性對應用了更新的新文檔索引。索引

此示例顯示如何經過將名稱字段更改成「Jane Doe」來更新之前的文檔(ID爲1):事務

POST /customer/_doc/1/_update?pretty
{
  "doc": { "name": "Jane Doe" }
}

此示例顯示如何經過將名稱字段更改成「Jane Doe」來更新咱們之前的文檔(ID爲1),同時向其添加年齡字段:

POST /customer/_doc/1/_update?pretty
{
  "doc": { "name": "Jane Doe", "age": 20 }
}

也可使用簡單腳本執行更新,此示例使用腳本將年齡增長5:

POST /customer/_doc/1/_update?pretty
{
  "script" : "ctx._source.age += 5"
}

在上面的示例中,ctx._source指的是即將更新的當前源文檔。

Elasticsearch提供了在給定查詢條件的狀況下更新多個文檔的能力(如SQL UPDATE-WHERE語句,請參閱docs-update-by-query API

刪除文檔

刪除文檔很是簡單,此示例顯示如何刪除之前的ID爲2的customer:

DELETE /customer/_doc/2?pretty

請參閱_delete_by_query API以刪除與特定查詢匹配的全部文檔,值得注意的是,刪除整個索引而不是使用Delete By Query API刪除全部文檔會更有效。

批處理

除了可以索引,更新和刪除單個文檔以外,Elasticsearch還提供了使用_bulk API批量執行上述任何操做的功能。此功能很是重要,由於它提供了一種很是有效的機制,能夠儘量快地執行多個操做,並儘量少地進行網絡往返。

做爲一個簡單示例,如下調用在一個批量操做中索引兩個文檔(ID 1 - John Doe和ID 2 - Jane Doe):

POST /customer/_doc/_bulk?pretty
{"index":{"_id":"1"}}
{"name": "John Doe" }
{"index":{"_id":"2"}}
{"name": "Jane Doe" }

此示例更新第一個文檔(ID爲1),而後在一個批量操做中刪除第二個文檔(ID爲2):

POST /customer/_doc/_bulk?pretty
{"update":{"_id":"1"}}
{"doc": { "name": "John Doe becomes Jane Doe" } }
{"delete":{"_id":"2"}}

請注意,對於刪除操做,以後沒有相應的源文檔,由於刪除只須要刪除文檔的ID。

Bulk API不會因其中一個操做失敗而失敗,若是單個操做因任何緣由失敗,它將繼續處理其後的其他操做,批量API返回時,它將爲每一個操做提供一個狀態(按照發送的順序),以便你能夠檢查特定操做是否失敗。


上一篇:探索你的集羣

下一篇:探索你的數據

相關文章
相關標籤/搜索