作者:來自 Elastic?Kofi Bartlett
探索在 Elasticsearch 中刪除文檔字段的方法。
更多有關 Elasticsearch 文檔的操作,請詳細閱讀文章 “開始使用 Elasticsearch (1)”。
想獲得 Elastic 認證?查看下一期 Elasticsearch Engineer 培訓的時間!
Elasticsearch 擁有大量新功能,幫助你為你的使用場景構建最佳搜索解決方案。查看我們的示例 notebooks 了解更多內容,開始免費的云端試用,或現在就在本地機器上體驗 Elastic。
在 Elasticsearch 中,從文檔中刪除字段是一個常見需求。當你想從索引中移除不必要或過時的信息時,這會很有用。本文將討論在 Elasticsearch 中刪除文檔字段的不同方法,并附帶示例和逐步說明。
方法一:使用 Update API
Update API 允許你通過提供腳本來更新文檔的內容。你可以使用該 API 將字段設置為 null,或者更好地,直接從文檔中刪除該字段。以下是執行此操作的分步指南:
-
確定你要更新的文檔的索引、文檔類型(如果使用的是 Elasticsearch 6.x 或更早版本)和文檔 ID。
-
使用 Update API,并提供一個腳本,該腳本將字段設置為 null,或直接從文檔中移除該字段。以下示例演示了如何從索引為
my_index
,ID 為1
的文檔中刪除名為field_to_delete
的字段:POST /my_index/_update/1 {"script": {"source": "ctx._source.remove('field_to_delete')","lang": "painless"} }
-
執行請求。如果成功,Elasticsearch 會返回一個響應,表示文檔已被更新。
注意:此方法只會從指定文檔中移除字段。該字段仍然會存在于映射和索引中的其他文檔中。
方法二:使用修改后的源數據進行重新索引
如果你想從索引中的所有文檔中刪除一個字段,可以使用 Reindex API 創建一個帶有修改后源數據的新索引。操作如下:
-
創建一個與原始索引具有相同設置和映射的新索引。你可以使用 Get Index API 獲取原始索引的設置和映射。
-
使用 Reindex API 將文檔從原始索引復制到新索引,同時從源中移除該字段。以下示例演示了如何從 “my_index” 索引中的所有文檔中刪除 “field_to_delete” 字段:
POST /_reindex {"source": {"index": "my_index"},"dest": {"index": "new_index"},"script": {"source": "ctx._source.remove('field_to_delete')"} }
-
驗證新索引中是否包含已刪除該字段的正確文檔
-
如果一切正常,你可以刪除原始索引,并在需要時為新索引添加一個別名,使其名稱與原始索引相同。
方法三:更新映射并重新索引
如果你想從映射和索引中的所有文檔中刪除一個字段,可以更新映射并重新索引文檔。操作如下:
-
創建一個與原始索引具有相同設置的新索引。
-
使用 Get Mapping API 獲取原始索引的映射。
-
修改映射,移除你想刪除的字段。
-
使用 Put Mapping API 將修改后的映射應用到新索引。
-
使用 Reindex API 將文檔從原始索引復制到新索引,方式同方法二。
-
驗證新索引是否包含已刪除該字段的正確文檔,且該字段不再出現在映射中。
-
如果一切正常,你可以刪除原始索引,并在需要時為新索引添加一個別名,使其名稱與原始索引相同。
結論
本文討論了在 Elasticsearch 中刪除文檔字段的三種方法:使用 Update API、通過修改后的 source 重新索引,以及更新映射后重新索引。每種方法都有其適用場景和權衡,請根據實際需求選擇合適的方法。在應用到生產環境之前,請務必測試你的變更并驗證結果。
原文:Deleting a field from a document in Elasticsearch - Elasticsearch Labs