2016-08-14 67 views
1

我試圖在Play 2.3.7 Scala中使用ElasticSearch。我已經安裝了彈性搜索,添加了一個索引,並啓動並運行(使用curl進行測試)。不過,我正在努力讓彈性4在播放控制器內部工作。Elastic4s/PlayFramework - 無法找到可執行參數的隱式值

我一直在使用一個簡單的遠程URL

val client = ElasticClient.remote("localhost", 9300)  

然後我嘗試在客戶機上執行創建客戶端。

client.execute { 
    ElasticDsl.index.into("test/test").id(id).fields (
        "title" -> title, 
        "uid" -> uid 
    ) 
} 

這是在一個Action內執行的,但是我得到以下錯誤。

could not find implicit value for parameter executable: com.sksamuel.elastic4s.Executable[com.sksamuel.elastic4s.IndexDefinition,R,Q] 
+0

你是否看到過這個問題,好像你的client.execute()需要被封裝在多個def中。 https://github.com/sksamuel/elastic4s/issues/324 –

+0

我確實看到了這個問題,但在那個例子中,他們正在做兩次搜索(因此需要多重搜索),因爲我正在做一個索引,所以多不應該被需要。我試着不管,但有一個錯誤,說多不能用索引。 – Codemwnci

回答

2

這似乎是因爲我沒有做ElasticDsl的全進口引起如下

import com.sksamuel.elastic4s.ElasticDsl._ 

而是做

import com.sksamuel.elastic4s.ElasticDsl 

當導入完整的對象,它清楚地調用同伴對象,包括需要的含義。

不進行完全導入的原因是因爲DSL的彈性與Anorm的DSL發生衝突,因此通過將彈性代碼提取到單獨的函數並使用函數定義內的導入,模糊性被刪除,代碼能夠編譯。

+0

僅供參考我有同樣的問題,'import com.sksamuel.elastic4s.ElasticDsl._'修復了我的問題 –

+1

對於5.3版我有同樣的問題。在http://elastic4s.readthedocs.io/en/latest/src/main/tut/docs/它說,如果我已經實例化了'TcpClient',我需要使用'com.sksamuel.elastic4s.ElasticDSL。 _'導入。但是,如果我使用HttpClient,我需要使用'com.sksamuel.elastic4s.http.ElasticDSL._'(注意這是一個不同的包:請參閱內部** http **) – andhdo

相關問題