2016-08-14 51 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

相关问题