簡體   English   中英

ElasticSearch嵌套數組部分更新

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM