ElasticSearch-如何使用Api更新进行更新

时间:2019-08-30 13:23:48

标签: elasticsearch kibana-6

我需要帮助以在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"
           }
       }
   }
 }

1 个答案:

答案 0 :(得分:1)

在插入的对象中,第一级的ID为1的对象中没有玩具属性。您的更新可能会导致空指针异常。

如果我对您的理解正确,则希望将其添加到玩具列表中(如果对象中存在)。为此,可以在对列表执行“添加”操作以避免空指针异常之前,使用if条件查看“玩具”字段是否存在(see answer on elastic forum)。

对于更系统的方法,我一直发现从非常简单的原型开始非常有帮助。我会向你推荐。尝试附加到仅包含列表的对象,然后添加if条件,然后添加其余条件。