使用elastic4s访问elasticsearch中的数组元素

时间:2018-04-20 09:26:33

标签: elasticsearch elasticsearch-plugin elasticsearch-5 elastic4s

我想从数组中删除一个元素,如下所示我在elasticsearchs中使用elastic4s插入了一个testindiex,类型为test,文档中包含一个Array。

我想从会员中删除ex:tony的值 - 我该怎么做

   val insert = client.execute {
  indexInto("testindex"/"test") id 1 fields(
      "members" -> Array(
      "tony",
      "salvidor",
      "bobby"
    ),
    "crews" -> Seq(
      "gualtieri",
      "baccalieri",
      "barese",
      "moltisanti"
    )
  )
}.await

我在这做了什么:

 val deleted=client.execute {
    deleteIn("testindex"/"test").by(termQuery("crews","gualtieri"))
  }.await

但这会删除整个文档而不是单个记录,请帮助我。

1 个答案:

答案 0 :(得分:0)

从Elasticsearch的嵌套/数组JSON中删除/更新元素

输入:JSON文档

{
  "members" -> Array(
    "tony",
    "salvidor",
    "bobby"
  ),
  "crews" ->
    "gualtieri"

)

下面的命令用于添加和删除数组中的元素

添加命令:在JSON文档中向元素添加元素

 val resp = client.execute { updateIn(indexname,doctype).query("crews", "gualtieri")  script {
  script("ctx._source.members.add(params.key)").params(Map("key"->"space"))
} }.await

remove命令:从JSON文档中的数组中删除元素

val resp1 = client.execute { updateIn(indexname,doctype).query("crews", "gualtieri")  script {
  script("ctx._source.members.remove(ctx._source.members.indexOf('salvidor'))")
    //.params(Map("key"->"abc"))
} }.await

removeAll命令:从数组中删除所有相同的元素。

val resp2 = client.execute { updateIn("testindex","test").query("crews", "gualtieri")  script {
  script("ctx._source.members.removeAll(Collections.singleton('space'))")
} }.await