我有包含my_array此特定對象:ElasticSearch嵌套陣列部分更新
"description": "My Object Description",
"my_array": [
{
"id": 1000,
"name": "abc",
"url" : "abc.html",
"content": "somebig content"
},
{
"id": 1001,
"name": "def",
"url" : "def.html",
"content": "somebig content"
},
{
"id": 1002,
"name": "xyz",
"url" : "xyz.html",
"content": "somebig content"
} ]
每個元素在數組包含一個URL。現在每當這個對象發生變化時,我有一個任務會觸發數組中的每個元素的url,獲取該元素的html內容,並創建可以被索引到elasticsearch中的請求文檔。
可以說,id = 1001的url不可訪問,並且此元素的內容無法訪問。我還是想繼續和元素1000過程中的變化,和1002在這種情況下我的更新應該是這樣的:
"description": "My New Object Description",
"my_array": [
{
"id": 1000,
"name": "abc",
"url" : "abc-new-url.html",
"content": "some modified content"
},
{
"id": 1002,
"name": "xyz",
"url" : "xyz-new-url.html",
"content": "some modified content"
} ]
如果我送這部分更新elasticsearch,收集得到更新,但元素1001從集合中刪除。
我的問題是我如何選擇性地更新元素1000和1002而不碰觸1001.索引陳舊與1001在這裏對我來說沒問題。一個明顯的選擇是從elasticsearch獲取現有的文檔,並在進行更新之前手動進行合併。有沒有其他方式可以執行此部分更新?
另一個問題,有沒有什麼辦法只發送url到elasticsearch,並編寫一個插件在索引時間獲取html內容,而不是事先做這件事?
這可以使用更新API和動態腳本。 – oLeduc