elastic4s でエラー処理
Scala から Elasticsearch を操作するクライアントライブラリ
Elasticsearch のサイトには、以下の4つが紹介されている。
更新具合その他を考えて、elastic4sを使うことにした。
Elastic4s の使い方 → RTFM
基本的な使い方は以下を参照。
- README
- サンプルコード的なの → SearchDslTest.scala
エラー処理
ドキュメントだと、エラーが起きた時にどう処理をすれば良いかが書いていない。
例えば、documentを追加するコードは
esClient.execute { index into s"index1/type1" fields ("field1" -> "val") }
みたいに書くけど、エラーが起きたらどうするんだろうと思った。
上の式のシグニチャーをみると Future[IndexResponse] らしい。IndexResponse は Elasticsearch の API で提供されている。ドキュメントはこの辺。
ドキュメントに追加できなかった場合は、isCreated メソッドが false を返す。それ以外に、サーバー側でエラーが起きたりとかした場合には例外が投げられる。
ということで、例えば以下のように処理できる。
import com.sksamuel.elastic4s.ElasticDsl._ import org.elasticsearch.action.index.IndexResponse import org.elasticsearch.transport.RemoteTransportException val f: Future[Boolean] = esClient.execute { index into s"index1/type1" fields ("field1" -> "val") } map (_.isCreated) recover { case e: RemoteTransportException => Logger.error(e.getMessage) false }
この辺はニーズに応じて好きなようにすれば良いかなと。
その他
コードをみたけど、結構ちゃんと書かれていた(と個人的には思った)。
まとめ?
Elasticsearch 便利。elastic4s も便利。