elasticsearch幾乎能實時提供資料操作和搜尋功能。預設情況下,從開始索引/更新/刪除資料到出現搜尋結果的時間可以認為需要一秒的時間。這是與sql等其他平台的重要區別,其中資料在事務完成後可以立即使用。
在上節中我們給索引建立了乙個文件,命令為
put/customer
/_doc/1
?pretty
我們不僅能索引和替換文件,還可以更新文件內容,但請注意,elasticsearch實際上並沒有在原文件進行就地更新。無論何時我們進行更新,elasticsearch都會刪除舊文件,索引乙個新文件來立刻替換它。示例如下
1.通過替換名字來更新文件。
post}/customer
/_doc/1
/_update
?pretty
2.將名稱欄位更改為「jane doe」並同時向其新增年齡欄位來更新我們以前的文件(id為1)
post/customer
/_doc/1
/_update
?pretty
}
3.更新也可以通過使用簡單的指令碼來執行。本示例使用指令碼將年齡增加5:
post我們也可以在官網檢視刪除相關api 位址/customer
/_doc/1
/_update
?pretty
在上面的例子中,ctx._source引用了即將更新的當前源文件。
elasticsearch提供了在查詢條件下更新多個文件的能力(如sql update-where語句),
具體可以參考
刪除文件也很簡單
delete /customer/_doc/2?pretty
3.批量處理
除了能夠索引,更新和刪除單個文件之外,elasticsearch還提供了使用_bulk api批量執行上述任何操作的功能。此功能非常重要,因為它提供了一種非常高效的機制,盡可能快地完成多項操作,盡可能少的網路往返。_bulk api的位址為
示例如下
post /customer/_doc/_bulk?pretty}}
上述命令在呼叫在一次批量操作中索引兩個文件(id 1 - john doe和id 2 - jane doe)。現在我們使用批量操作更新第乙個文件並刪除id為2的文件
post /customer/_doc/_bulk?pretty} }
}
請注意,對於刪除操作,後面沒有對應的源文件,因為刪除操作只需要刪除文件的標識。批量api不會因其中乙個操作失敗而失敗。即不支援事務,如果乙個動作因任何原因失敗,它將繼續處理其後的其餘動作。當批量api返回時,它將為每個操作提供乙個狀態(按照它傳送的相同順序),以便您可以檢查特定操作是否失敗。 Elasticsearch 併發修改樂觀鎖
來自 1 elasticsearch 的樂觀鎖,可以使用外部系統提供的版本號 這時elasticsearch將只檢查提供的版本是否比當前儲存在索引中的版本大 大多少不重要 如果是成功,否則失敗。在elasticsearch中,更新請求實際上是分為兩個階段,獲取文件,修改文件,然後儲存文件。那麼當兩個...
ElasticSearch修改和刪除文件
修改文件方式一 使用prepareupdate,prepareindex兩者選其一皆可 刪除文件方式一 使用preparedelete刪除文件 client.preparedelete blog2 article article.getid tostring get 修改文件方式二 直接使用upda...
Elasticsearch怎麼修改索引字段型別?
由於elasticsearch沒有像mysql一樣可以直接字段資料型別的方法,因此需要通過建立中間索引 data index 1,備份資料到中間索引 data index 1,然後刪除原索引 data index,重新建立正確資料型別索引 data index,再把中間索引 data index 1...