使用不接受scalaMap的脚本elasticsearch api进行更新

yvfmudvl  于 2021-06-15  发布在  ElasticSearch
关注(0)|答案(1)|浏览(426)

我遇到了一个需要更新elasticsearch文档中特定字段的用例。对于这个用例,我使用了 Update API with a script es文件。但是我遇到了一个问题(编译错误) Script 接受以下p的构造函数arameters:--> type , lang , idOrCode 以及 params 问题在于 params (java.util.map)参数。
我甚至试过scala到java的转换器,但都解决不了。
代码段

import org.elasticsearch.action.update.UpdateRequest
import org.elasticsearch.client.RequestOptions
import org.elasticsearch.script.{Script, ScriptType}

object Testing extends App {

  val result = updateByScript("testing", "hW7BBnQBn2nWmIjS_b0C", 10.0)
  println("@@@@@@result:---> " + result)
  high_level_client.close()

  def updateByScript(index: String, id: String, count: Double) = {

    //import scala.collection.JavaConversions.mapAsJavaMap
    //import collection.JavaConverters._
    import scala.collection.JavaConverters._

    val updateRequest = new UpdateRequest(index, id)

    val params = Map[String, Double]("count" -> count)

    val script = new Script(ScriptType.INLINE, "painless", "ctx._source.count += params.count", mapAsJavaMap(params))
    updateRequest.script(script)

    high_level_client.update(updateRequest, RequestOptions.DEFAULT)
  }
}
7d7tgy0s

7d7tgy0s1#

对于上述问题,我尝试了 Script 具有 idOrCode 参数,它解决了我的用例,但我仍然没有得到其他的解决方案 Script 施工人员。
与接受 idOrCode 参数。
代码段

import org.elasticsearch.action.update.UpdateRequest
import org.elasticsearch.client.RequestOptions
import org.elasticsearch.script.{Script, ScriptType}

object Testing extends App {

  val result = updateByScript("testing", "hW7BBnQBn2nWmIjS_b0C", 10.0)
  println("@@@@@@result:---> " + result)
  high_level_client.close()

  def updateByScript(index: String, id: String, count: Double) = {
    val updateRequest = new UpdateRequest(index, id)
    val script = new Script(s"""ctx._source.count += $count""")
    updateRequest.script(script)
    high_level_client.update(updateRequest, RequestOptions.DEFAULT)
  }
}

相关问题