solr-scala-client 0.0.4をリリースしました

solr-scala-client 0.0.4をリリースしました。

0.0.3にはファセット検索を行わないとNullPointerExceptionが発生するという致命的な問題があったのですが、この問題を修正するためのプルリクエストをいただいていたのでこれを取り込ませていただきました。

また、これまではクエリで以下のような記述で変数を埋め込むことができましたが、

  • %VAR_NAME% : 単一のキーワードをエスケープして埋め込み
  • $VAR_NAME$ : 単純な文字列置換

今回のバージョンでは?VAR_NAME?でパラメータとして渡した式をSolrのクエリに変換したうえで置換するという機能を追加しました。
たとえばこんな感じで検索を行うと…

var result = client.query("name: ?query?")
  .getResultAsMap(Map("query" -> "ThinkPad & (X201s | X201)"))

以下のようなクエリがSolrに発行されます。

name:("ThinkPad" AND ("X201s" OR "X201"))

この機能を使用することで検索フォームなどでAND検索やOR検索なども可能なクエリを、アプリ側でクエリを加工するのではなく、入力されたクエリを直接solr-scala-clientに渡して検索することができます。
文字列はsolr-scala-client側で自動的にエスケープされますし、"ThinkPad X201s X201"のようにスペース区切りで記述した場合は演算子を書かなくても自動的にAND検索になるなど、ユーザが直接Solrのクエリを記述するよりは便利なのではないかと思います。
なお、式のパースに失敗した場合はExpressionParseExceptionがスローされるので、アプリ側でこの例外をハンドリングしてエラーメッセージを表示するなどする必要があります。