1

我正在尝试将一串 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 而不是我传递的字符串。

根据此文档,在我看来,我应该能够传递杰克逊将编组为 JSON 的字符串。不过,基于这个线程,在我看来,elastic4s 不支持在不为其创建模板的情况下对 JSON 字符串进行索引。

我的问题有两个:1)是否可以在不创建案例类来映射数据的情况下索引 JSON 字符串?2)如果可能的话,是否可取?还是因为最好知道我正在索引的数据的结构而不是仅仅添加一个我不一定检查过的 JSON 字符串而气馁?

我正在使用 ElasticSearch 2.1.1 版。这是我的 elastic4s 依赖项:

"com.sksamuel.elastic4s" %% "elastic4s-core" % "2.1.1"
4

1 回答 1

1

没有理由在索引数据之前必须拥有强类型的数据结构。在某些情况下这是可取的(例如,如果您正在使用 Scala 中的数据),但在其他情况下,您可能只是充当网关(例如,从 HDFS 读取并索引文件的进程)。

要做你想做的事,doc需要 a DocumentSource,所以只需创建一个JsonDocumentSource包装 Json 字符串的JsonDocumentSource(yourjsonhere).

所以你的完整例子看起来像:

client.execute {
  index into "address/type" doc JsonDocumentSource(inputDoc)
}
于 2016-02-03T20:48:36.667 回答