2017-08-14 78 views
0

我有一个Elasticsearch-DB,并希望将元素(字符串)添加到数组中。在这里讨论https://discuss.elastic.co/t/append-to-existing-field/16423/2之后,我设立了一个玩具模型。 我的init有:Elasticsearch,为什么被添加元素始终为空

curl -XPOST "http://localhost:9200/t/t/1/" -d' 
{ 
"hobbies" : ["a", "b"] 
}' 

和更新阵列

curl -XPOST "http://localhost:9200/t/t/1/_update" -d' 
{ 
"script" : "ctx._source.hobbies.add(params.hobby)", 
"params" : { 
"hobby" : "c" 
} 
}' 

不幸的是,更新的结果始终是 “零”,而不是 “C”:

curl -XGET 'http://localhost:9200/_search?q=_id:"1"&pretty' 

{ 
    "took" : 29, 
    "timed_out" : false, 
    "_shards" : { 
    "total" : 20, 
    "successful" : 20, 
    "failed" : 0 
    }, 
    "hits" : { 
    "total" : 1, 
    "max_score" : 1.0, 
    "hits" : [ 
     { 
     "_index" : "t", 
     "_type" : "t", 
     "_id" : "1", 
     "_score" : 1.0, 
     "_source" : { 
      "hobbies" : [ 
      "a", 
      "b", 
      null, 
      null, 
      null 
      ] 
     } 
     } 
    ] 
    } 
} 

我是什么做错了?

回答

0

script结构是不正确的,应该是这样的:

curl -XPOST "http://localhost:9200/t/t/1/_update" -d' 
{ 
    "script" : { 
     "inline": "ctx._source.hobbies.add(params.hobby)", 
     "params" : { 
     "hobby" : "c" 
     } 
    } 
}'