SolrJをラップしたScala用のSolrクライアントsolr-scala-client 0.0.7をリリースしました。
https://github.com/takezoe/solr-scala-client
今回のバージョンでの変更点は以下の通りです。
- Scala 2.10向けのビルドを追加
- SolrJを4.2.0にバージョンアップ
- 検索結果のハイライトに対応
検索結果のハイライトは以下のような感じでhighlight()メソッドを呼び出しておくことで検索結果のMapもしくはケースクラスにhighlightという名前のプロパティとしてセットされます。この例ではプレフィックスとサフィックスを指定していますが、省略することも可能です(その場合はSolrJ標準の<em>〜</em>でマークアップされます)。
val result = client.query("content: Scala") // ユニークキーのフィールドは必ず取得する必要がある .fields("id") // ハイライトするフィールドとプレフィックス、サフィックスを指定 .highlight("content", "<strong>", "</strong>") .getResultAsMap() result.documents.foreach { doc => println("id: " + doc("id")) println(doc("highlight")) }
SolrJではハイライト結果とドキュメントをユニークキーで関連付ける必要があります。solr-scala-clientはデフォルトではidという名前のフィールドを主キーとみなしますが、異なる名前のフィールドをユニークキーに使っている場合は以下のようにid()メソッドでユニークキーのフィールド名を指定しておく必要があります。
val result = client.query("content: Scala") .id("documentId") // ユニークキーのフィールド名を指定 .fields("documentId") .highlight("content", "<strong>", "</strong>") .getResultAsMap()
ここでは結果をマップで取得していますが、ケースクラスの場合もhighlightというプロパティを用意しておけばハイライト結果がセットされます。