如果它不是现有元素,则附加到Elasticsearch字段列表/数组

Har*_*ker 5 elasticsearch

说我们有:

curl -XPOST "http://localhost:9200/t/t/1" -d'
{
     "hobbies" : ["a", "b"]
}'
Run Code Online (Sandbox Code Playgroud)

我知道我可以这样做来补充爱好:

curl -XPOST "http://localhost:9200/t/t/1/_update" -d'
{
     "script" : "ctx._source.hobbies += hobby",
     "params" : {
         "hobby" : "c"
     }
}'
Run Code Online (Sandbox Code Playgroud)

但是,如果业余爱好不是'c'而是'b',我该怎么做,这样我就不会以[“ a”,“ b”,“ b”]结束爱好了?因此,如果“ c”还不是一个爱好,它只会附加“ c”吗?

kee*_*ety 6

您可以通过稍微修改OP中的脚本来实现相同目的

范例:

curl -XPOST "http://localhost:9200/t/t/1/_update -d'
{
     "script" : " if(! ctx._source.hobbies.contains(hobby)){ ctx._source.hobbies += hobby }",
     "params" : {
         "hobby" : "c"
     }
}'
Run Code Online (Sandbox Code Playgroud)

上面的示例假定存在现场爱好,并且是一个列表,否则您将需要更多的逻辑来处理这些爱好