我试图通过使用。将一些数据索引到弹性搜索 elastic4s API和播放框架
我基本上是从控制器中调用这个方法
def test(){
val client = ElasticClient.local
client.execute { create index "bands" }
client execute { index into "bands/singers" fields "name"->"chris martin" }
client.close()
}
我没有在播放或弹性搜索日志中收到任何错误,
然后我使用Sense插件检查数据是否被索引并且我得到了
{
"error": "IndexMissingException[[bands] missing]",
"status": 404
}
看起来查询没有进入服务器? ...
答案 0 :(得分:6)
这是因为创建索引不是同步的,因此您在创建索引完成之前尝试进行索引。
最简单的方法是通过调用
使create index同步 client.sync.execute { create index "bands" }
在创建索引之前将阻塞,该索引应该是< 1秒。或者你可以将未来的工作归还。
编辑:在elastic4s 1.3中,同步已被替换为期货的.await助手。
client.execute( create index "bands" ).await
答案 1 :(得分:1)
很难确定,但可能是执行调用实际上抛出了您没有看到的异常,因为Client。execute方法返回Future [Res]而不是阻塞并返回直接决定。
请原谅我,如果我对此错了,但是因为听起来你只是熟悉这个lib是如何工作的,我建议使用onComplete回调(或{{3}上的其他策略) })看看未来实际完成时会发生什么。
答案 2 :(得分:0)
如果不要求使用Java API,您还可以尝试使用ElasticSearch的REST Scala客户端:https://github.com/gphat/wabisabi。它更透明,但您必须添加一些线束来创建Json请求。播放Json库+一些简单的助手原则上就是所有需要的。