我需要帮助以在Elasticsearch中使用Api Update,问题是我想在结构内部进一步更新此级别时遇到的问题,例如:
{
"mainLevel": [
{ "idmainLevel": 1,
"name": "maxi",
"SecundaryLevel": [
{
"idSecundaryLevel": 25,
"title": "Bachelor"
}
]
}
]
}
在这种情况下,更新要在“ SecondaryLevel”中执行,但是对于某个“ MainLevel”,我将索引保留在下面。
# Index an animal
POST test_object/animales/1
{
"name": "test_object",
"cats": [
{
"id_cat": 1,
"name": "Irida",
"breed": "European Shorthair"
},
{
"id_cat": 2,
"name": "Nino",
"breed": "Aegean",
"toys": [
{
"id_toy": 1,
"colors": 1,
"name": "pelotita"
}
]
}
],
"dogs": [
{
"id_dog": 1,
"name": "Irida",
"breed": "European Shorthair"
}
]
}
我的更新:
POST test_object/animales/1/_update
{
"script": {
"source": "ctx._source.toys.add(params.val)",
"lang": "painless",
"params": {
"val": {
"id_toy": 2,
"colors": 77,
"name": "cricket"
}
}
}
}
答案 0 :(得分:1)
在插入的对象中,第一级的ID为1的对象中没有玩具属性。您的更新可能会导致空指针异常。
如果我对您的理解正确,则希望将其添加到玩具列表中(如果对象中存在)。为此,可以在对列表执行“添加”操作以避免空指针异常之前,使用if条件查看“玩具”字段是否存在(see answer on elastic forum)。
对于更系统的方法,我一直发现从非常简单的原型开始非常有帮助。我会向你推荐。尝试附加到仅包含列表的对象,然后添加if条件,然后添加其余条件。