今天在对已有的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"}
}
}
}
}
}
原文地址:https://www.cnblogs.com/olzoooo/p/11425578.html
时间: 2024-10-12 08:42:02