我正在尝试将一串JSON数据传递到这样的索引语句中,其中inputDoc是我的JSON字符串:
def Update(client: ElasticClient, idx:String, `type`: String, inputDoc: String): Unit = {
val address = idx + "/" + `type`
client.execute {
index into address doc inputDoc
}
}
我收到编译错误,无法解析doc,我假设是因为它正在寻找DocumentSource或DocumentMap而不是我传递的String。
根据this documentation,我觉得我应该能够传递杰克逊将编组成JSON的字符串。虽然基于this thread,但听起来像弹力4并不支持索引JSON字符串而不为其创建模板。
我的问题有两方面: 1)是否可以索引JSON字符串而无需创建用于映射数据的案例类? 2)如果可能,是否可取?或者是因为我更倾向于知道我索引的数据的结构而不仅仅是添加一个JSON字符串而不是必须检查?
我正在使用ElasticSearch版本2.1.1。这是我对elastic4s的依赖:
"com.sksamuel.elastic4s" %% "elastic4s-core" % "2.1.1"
答案 0 :(得分:1)
在索引数据之前,您没有必要拥有强类型数据结构。在某些情况下,这是更可取的(例如,如果您正在使用Scala中的数据),但在其他情况下,您可能只是充当网关(例如,从HDFS和索引读取的进程)文件)。
要执行您想要的操作,doc
需要DocumentSource
,因此只需创建一个包含Json字符串的JsonDocumentSource
,即可JsonDocumentSource(yourjsonhere)
。
所以你的完整例子看起来像是:
client.execute {
index into "address/type" doc JsonDocumentSource(inputDoc)
}