向elasticsearch中動態添加字段報錯問題和向elasticsearch中添加嵌套數據類型數據--工作學習記錄


今天在對已有的es庫中進行update操作時發現update操作失敗(提示說是操作不允許)。然后發現原因是:es中type的“dynamic”屬性為“strict”

然后感覺有兩種方法解決:

1.向type中新增字段,再動態添加

2.修改es中dynamic屬性為true(這種的話改動太大就算了)

之后我就通過第一種方法進行解決。但是,要添加的數據類型是嵌套數據類型。

如果就像普通的數據那樣進行添加的話,es引擎內部會把對象數組展開成扁平的數據結構,數據之間的依賴關系會丟失。

 

例如:"tag":[

             {

               "tagname":"測試標簽1",

               "userid":"admin1"

             }

            {

              "tagname":"測試標簽2",

              "userid":"admin2"

             }

       ]

像這樣添加數據后es會解析成  {

                                                   "tag.tagname":["測試標簽1","測試標簽2"],

                                                   "tag.userid":["admin1","admin2"]

                                                 }

這樣的話admin1添加的標簽雖然是"測試標簽1",但是經過es這么一解析,我們就不能通過admin1來查出他所添加的標簽了。

 

為了解決這個問題,在添加該對象數組的時候就把它設置成嵌套類型。具體操作如下:

PUT /indextest/_mapping/typetest

{

  "typetest":{

       "properties":{

             "tag":{

                "type":"nested",

                 "properties":{

      "userid":{"type": "text"},

      "tagname":{"type": "text"}

                  }

             }

         }

   }

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM