维护一组值

时间:2015-03-12 06:35:38

标签: arrays elasticsearch

在我的文档中,我在字段setValues下维护一个集合。我可以使用更新API脚本支持向其添加值,但是如果元素已经存在,则在插入时将重复元素添加到此值。所以我想添加一个元素,只要它不存在于数组中。如何模拟此设置操作。

假设这是我的字段:

 setValues = [
        {
            color: "red",
            value: "#f00"
        },
        {
            color: "green",
            value: "#0f0"
        },
        {
            color: "blue",
            value: "#00f"
        },
        {
            color: "cyan",
            value: "#0ff"
        },
        {
            color: "magenta",
            value: "#f0f"
        },
        {
            color: "yellow",
            value: "#ff0"
        },
        {
            color: "black",
            value: "#000"
        }
    ]

这里,如果我想将以下元素添加到setValues

   `{
     color: "magenta",
     value:#f0f
    }

它应检查此元素是否已存在于setValue数组中,并且由于此条目已存在,因此不应添加新元素。但是如果我尝试添加一个数组中没有的元素,它应该添加并更新。

1 个答案:

答案 0 :(得分:0)

您需要在Update API中使用脚本并遍历元素以查找是否存在重复元素。然后根据它,插入或不插入。

要应用的脚本

 source = ctx._source
    Boolean isAdded = false;
    for(page in source.setValues){
            if(page.name == newValue.name){
                    isAdded = true
            }
    }
    if(!isAdded){
            source.setValues += newValue
    }

示例请求

 curl -XPOST 'localhost:9200/test/type1/1/_update' -d '{
  "script": "referAboveScript",
  "params": {
    "newValue": {
      "color": "magenta",
      "value": "#f0f"
    }
  }
}'