2016-02-03 53 views
1

我試圖JSON字符串數據傳遞到像這樣的索引的語句,其中inputDoc是我的JSON字符串:使用elastic4s索引JSON數據的字符串是否可行?

def Update(client: ElasticClient, idx:String, `type`: String, inputDoc: String): Unit = { 
    val address = idx + "/" + `type` 

    client.execute { 
     index into address doc inputDoc 
    } 
    } 

我得到一個編譯器錯誤文檔不能被解決,我假設是因爲它正在查找DocumentSource或DocumentMap而不是我傳遞的字符串。

基於this documentation它看起來像我應該能夠傳遞一個字符串,傑克遜將馬歇爾到JSON。雖然基於this thread,但聽起來像elastic4s不支持對JSON字符串建立索引而沒有爲其創建模板。

我的問題是雙重的: 1)是否可以索引JSON字符串而不創建用於映射數據的case類? 2)如果這是可能的,這是可取的嗎?或者是不鼓勵,因爲它最好知道我索引的數據的結構,而不是僅僅添加一個JSON字符串我不一定檢查?

我正在使用ElasticSearch 2.1.1版。這裏是我的elastic4s依賴:

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

回答

1

沒有理由爲什麼你必須有一個強類型的數據結構之前,你索引你的數據。在某些情況下,這是可取的(例如,如果您正在使用Scala中的數據),但在其他情況下,您可能只是充當網關(例如,從HDFS讀取併爲文件建立索引的進程)。

做你想做什麼,doc需要一個DocumentSource,所以只需要創建一個JsonDocumentSource它包裝JSON字符串,通過做JsonDocumentSource(yourjsonhere)

所以你完整的例子看起來是這樣的:

client.execute { 
    index into "address/type" doc JsonDocumentSource(inputDoc) 
} 
相關問題