java - 使用不接受 Scala Map 的脚本 ElasticSearch API 进行更新
问题描述
我遇到了一个用例,我需要更新 ElasticSearch 文档中的特定字段。所以对于这个用例,我使用了Update API with a script
ES doc。但是我遇到了Script
Constructor 的问题(编译错误),它接受以下参数:--> 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)
}
}
解决方案
对于上述问题,我尝试了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)
}
}
推荐阅读
- bash - 有没有办法将 bash 解释器与脚本捆绑在一起?
- prometheus - 如何在 prometheus 中省略 Promql 标签以避免重复通知
- segmentation-fault - 程序收到信号 SIGSEGV,尝试分配多长度 3D 数组时出现分段错误
- windows - BizTalk 尝试连接到服务器“DB”上的“BizTalkMgmtDb”SQL Server 数据库失败
- dask - 为什么迟迟什么都不做?
- java - 如何在应用程序中插入 PDF 文件
- angular - TypeScript 将重载添加到另一个定义文件中的方法
- asp.net-core - VS2019:在 asp.net 核心项目中添加或重命名文件非常慢
- c++ - 优先级队列和向量中相同比较器的顺序差异
- python - 提取整数