SolrJをラップしたScala用のSolrクライアントsolr-scala-client 0.0.8をリリースしました。
https://github.com/takezoe/solr-scala-client
今回のバージョンでの変更点は以下の通りです。
- レコメンデーション検索をサポート
- SolrClientにrollbackメソッドとwithTransactionメソッドを追加
- AsyncHttpClientベースのノンブロッキングAPIを追加
特にノンブロッキングAPIの追加が大きな新機能です。本当はSolrJ側でノンブロッキングAPIが実装されてから対応すればいいやと思っていたのですが、実装される気配がないので自作することにしました。
ブロッキング版のSolrClientとほぼ同じメソッドを実装していますが、結果の代わりにFutureが返ってくるインターフェースになっています。簡単な例だとこんな感じ。
val client = new AsyncSolrClient("http://localhost:8983/solr") // Register client .register(Map("id" -> "005", "name" -> "ThinkPad X1 Carbon", "manu" -> "Lenovo")) .onComplete{ case Success(x) => println("registered!") case Failure(t) => t.printStackTrace() } // Query client.query("name:%name%") .fields("id", "manu", "name") .facetFields("manu") .sortBy("id", Order.asc) .getResultAsMap(Map("name" -> "ThinkPad X201s")) .onComplete { case Success(x) => println(x) case Failure(t) => t.printStackTrace() }
内部ではAsyncHttpClientというJavaベースのノンブロッキングHTTPクライアントライブラリを使用しています。Apache HttpComponentsでもノンブロッキングAPIが実装されているのですが、SolrJが内部で使用しているHttpComponentsとバージョンがあわなかったため、AsyncHttpClientを使うことにしました。