弹性体和游戏框架2.2.1

时间:2014-02-15 20:26:08

标签: scala playframework-2.0 elasticsearch elastic4s

我试图通过使用。将一些数据索引到弹性搜索 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
   }

看起来查询没有进入服务器? ...

3 个答案:

答案 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库+一些简单的助手原则上就是所有需要的。