2014-02-15 121 views
2

我被使用 elastic4s API和发挥框架elastic4s和游戏框架2.2.1

我基本上从控制器调用此方法试图索引某些数据弹性搜索

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

可以ü请使用Scala的客户端游戏的框架建议我在弹性搜索一些很好的教程....请将非常有助于充分为我 – swaheed

回答

1

很难说清楚,但可能是因为Client .execute方法返回Future [Res]而不是阻塞并返回一个直接解决。我会建议使用onComplete回调(或Scala futures page上的一些其他策略)来使用onComplete回调(或其他策略)看看未来实际完成时发生了什么。

+0

我的回答是实际上更可能是正确的。创建和索引将立即在他的代码示例中执行,而创建需要大约50ms才能在数据库中生效。 – monkjack

0

如果不需要使用Java API,那么您还可以尝试使用REST Scala客户端进行ElasticSearch:https://github.com/gphat/wabisabi。它更透明,但你必须添加一些线束来创建Json请求。原则上玩Json库+一些简单的助手是所有需要的。

6

这是因为创建索引不同步,因此您要在创建索引完成之前尝试索引。

最简单的方法是通过调用

client.sync.execute { create index "bands" }

这将阻止,直到创建索引,这应该是< 1秒,使创建索引同步。或者你可以消除返回的未来。

编辑:在elastic4s 1.3中,sync已被期货中的.await helper取代。

client.execute(create index "bands").await