【问题标题】:elastic4s and play framework 2.2.1elastic4s和play框架2.2.1
【发布时间】:2014-02-15 20:26:08
【问题描述】:

我正在尝试使用 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
   }

查询好像没有发送到服务器?? ...

【问题讨论】:

  • 你能不能给我推荐一些关于使用带有播放框架的 scala 客户端进行弹性搜索的好教程......请它对我很有帮助

标签: scala playframework-2.0 elasticsearch elastic4s


【解决方案1】:

这是因为创建索引不是同步的,所以您尝试在创建索引完成之前进行索引。

最简单的方法是通过调用使创建索引同步

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

在创建索引之前会阻塞,应该小于 1 秒。或者你可以处理返回的未来。

编辑:在 elastic4s 1.3 中,同步已被替换为期货上的 .await 助手。

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

【讨论】:

    【解决方案2】:

    很难确定,但可能是执行调用实际上抛出了您没有看到的异常,因为 Client.execute 方法返回 Future[Res] 而不是阻塞并直接返回 Res .

    如果我对此有误,请原谅我,但由于听起来您只是熟悉此库的工作原理,因此我建议您使用 onComplete 回调(或Scala futures page 上的其他策略)看看 Future 真正完成时会发生什么。

    【讨论】:

    • 我的回答实际上更有可能是正确的。 create 和 index 将在他的代码示例中立即执行,而 create 大约需要 50 毫秒才能在数据库中生效。
    【解决方案3】:

    如果不要求使用 Java API,您还可以尝试 ElasticSearch 的 REST Scala 客户端:https://github.com/gphat/wabisabi。它更加透明,但是您必须添加一些工具来创建 Json 请求。原则上,Play Json 库 + 几个简单的助手就足够了。

    【讨论】:

      猜你喜欢
      • 2015-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-31
      相关资源
      最近更新 更多