今天在對已有的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"}
}
}
}
}
}