我在类型数组的elasticsearch索引中有一个field_keyword字段,我试图用新值附加field_keyword字段,但我想避免重复的值被添加到列表中。
例如:
如果我两次通过以下请求,

{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "field": "Invoice Number"
          }
        },
        {
          "term": {
            "locale": "US"
          }
        }
      ]
    }
  },
 "script": {
    "source": "ctx._source.field_keyword.add(params.new_field_keyword);",
    "params": {
      "new_field_keyword": "Invois #"
    }
  }
}
"Invois #"被添加两次,
"field_keyword": [      "TAX INVOICE NO. :",
                        "Invois #",
                        "Invois #"]
如何避免元素被添加两次。

最佳答案


如果该值不存在,则仅添加。
例如:

{
  "query": {
    "bool": {
  "must": [
    {
      "term": {
        "field": "Invoice Number"
      }
    },
    {
      "term": {
        "locale": "US"
      }
    }
  ]
}
  },
  "script": {
    "source": "if(!ctx._source.field_keyword.contains(params.new_field_keyword)){ctx._source.field_keyword.add(params.new_field_keyword)}",
    "params": {
      "new_field_keyword": "Invois #"
    }
  }
}

10-07 14:18