[英]ElasticSearch Nested Array Partial Update
我有一個包含my_array的特定對象:
"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,獲取該元素的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已從該集合中刪除。
我的問題是如何在不觸摸1001的情況下選擇性地更新元素1000和1002。這里的索引用1001過時對我來說還可以。 一個顯而易見的選擇是從elasticsearch中獲取現有文檔,並在進行更新之前手動進行合並。 還有其他方法可以執行此部分更新嗎?
另一個問題是,有什么方法可以只將URL發送到elasticsearch,並編寫一個插件來在索引時獲取html內容,而不是事先做呢?
我認為您可以在更新查詢中使用腳本解決此問題,請在此處查看以下答案: 從數組彈性搜索中刪除對象
您無法使用Elasticsearch本機API進行此類更新。 但是,如果您不想在應用程序級別手動合並更新的內容,則可能的解決方案是將數組的每個元素存儲在文檔中,該文檔的索引與原始文檔相同,但類型不同。
然后分別對這些元素中的每個元素(在本例中為文檔)進行更新
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.