Elasticsearch:向现有文档添加新字段

时间:2019-05-17 14:29:33

标签: elasticsearch

我想向一个查询匹配的现有文档中添加一个具有新字段的新对象。

PUT test/_doc/1
{ 
 "id" : 1,
 "text": "My life is beautiful"
 "category": "optimistic"
}

我想在所有“类别”:“乐观”文档中添加一个新对象,例如

{"references": {
   "group": "Pro-life",
   "responsable": "Mr. Happy Guy"
   "job": "Happiness bringer"
}

我想尝试update_by_query,但不能使它与这样的对象一起使用。有什么想法吗?

我确实尝试过:

{
     "script": "ctx._source.references='{\"hello\":\"world\"}'",
     "query": {
        "match": {
            "category": "optimistic"
        }
     }
} 

但是它没有给我预期的结果。它只是将其另存为字符串"""{"hello":"world"}""" 而我希望将其作为JSON对象

2 个答案:

答案 0 :(得分:1)

未经测试,但您可以将paramsupdate_by_query一起使用,

{
     "query": {
        "match": {
            "category": "optimistic"
        }
     },
     "script": {
       "inline": "ctx._source.references = params.new_fields",
       "params": {
       "new_fields": {
           "group": "Pro-life",
           "responsable": "Mr. Happy Guy"
           "job": "Happyness bringer"
        }
      }
    }
} 

答案 1 :(得分:0)

您应该使用painless语法来做到这一点,像这样尝试:

"script": "ctx._source.references=[ \"hello\":\"world\" ]"

更多信息:https://www.elastic.co/guide/en/elasticsearch/painless/current/painless-operators-reference.html#map-initialization-operator