是否possible/advisable使用elastic4s索引一串JSON数据?
Is it possible/advisable to index a String of JSON data using elastic4s?
我正在尝试将一串 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 而不是我传递的字符串。
虽然基于 this documentation it looks to me like I should be able to pass a String that Jackson will marshall into JSON. Based on this thread,但在我看来,elastic4s 不支持索引 JSON 字符串而不为其创建模板。
我的问题有两个:
1) 是否可以在不创建 case class 映射数据的情况下索引 JSON 字符串?
2)如果可能,是否可取?还是因为知道我正在索引的数据的结构而不是仅仅添加一个我不一定检查过的 JSON 字符串更好?
我正在使用 ElasticSearch 2.1.1 版。这是我的 elastic4s 依赖项:
"com.sksamuel.elastic4s" %% "elastic4s-core" % "2.1.1"
没有理由在索引数据之前必须具有强类型数据结构。在某些情况下,这是更可取的(例如,如果您在 Scala 中处理数据),但在其他情况下,您可能只是充当网关(例如,从 HDFS 读取文件并为文件编制索引的进程)。
要执行您想要的操作,doc
需要 DocumentSource
,因此只需创建一个 JsonDocumentSource
来包装 Json 字符串,方法是 JsonDocumentSource(yourjsonhere)
.
因此您的完整示例如下所示:
client.execute {
index into "address/type" doc JsonDocumentSource(inputDoc)
}
我正在尝试将一串 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 而不是我传递的字符串。
虽然基于 this documentation it looks to me like I should be able to pass a String that Jackson will marshall into JSON. Based on this thread,但在我看来,elastic4s 不支持索引 JSON 字符串而不为其创建模板。
我的问题有两个: 1) 是否可以在不创建 case class 映射数据的情况下索引 JSON 字符串? 2)如果可能,是否可取?还是因为知道我正在索引的数据的结构而不是仅仅添加一个我不一定检查过的 JSON 字符串更好?
我正在使用 ElasticSearch 2.1.1 版。这是我的 elastic4s 依赖项:
"com.sksamuel.elastic4s" %% "elastic4s-core" % "2.1.1"
没有理由在索引数据之前必须具有强类型数据结构。在某些情况下,这是更可取的(例如,如果您在 Scala 中处理数据),但在其他情况下,您可能只是充当网关(例如,从 HDFS 读取文件并为文件编制索引的进程)。
要执行您想要的操作,doc
需要 DocumentSource
,因此只需创建一个 JsonDocumentSource
来包装 Json 字符串,方法是 JsonDocumentSource(yourjsonhere)
.
因此您的完整示例如下所示:
client.execute {
index into "address/type" doc JsonDocumentSource(inputDoc)
}