solr-scala-client is a Apache Solr client for Scala wrapping SolrJ.
The list of new features in 0.0.2:
- Added initializer which configures SolrClient.
- Added basic authentication support as initializer.
- Added facet search support.
- Added case class support as query results and query parameters.
The query result became to be returned as MapQueryResult or CaseClassQueryResult instead of List[Map[String, Any]]. This object contains both of documents and facet counts.
val result = client.query("name:%name%")
.fields("id", "manu", "name")
.facetFields("manu")
.sortBy("id", Order.asc)
.getResultAsMap(Map("name" -> "ThinkPad X201s"))
// retreive documents
result.documents.foreach { doc =>
println("id: " + doc("id"))
println(" manu: " + doc("manu"))
println(" name: " + doc("name"))
}
// retreive facet counts
result.facetFields.foreach { case (field, counts) =>
println("field: " + field)
counts.foreach { case (manu, count) =>
println(" " + manu + ": " + count)
}
}
It's possible to use the case class as the query result and the query parameter instead of Map[String, Any]. Note: update operations don't support the case class in 0.0.2. It will be supported in the next version.
// the case class for the document
case class Product(id: String, manu: Option[String], name: String)
// the case class for the parameter
case class Param(name: String)
// query using case classes
val result = client.query("name:%name%")
.fields("id", "manu", "name")
.facetFields("manu")
.sortBy("id", Order.asc)
.getResultAs[Product](Param("ThinkPad"))
result.documents.foreach { product =>
println(product)
}
As small improvement of SolrClient, it became to accept the initializer function. This function takes CommonsHttpSolrServer and can do any processing for it.
val client = new SolrClient("http://localhost:8983/solr", {
server: CommonsHttpSolrServer => // initialize...
})
0.0.2 contains the BASIC authentication support as the initializer. see the following example.
val client = new SolrClient("http://localhost:8983/solr",
Auth.basic("username", "password"))
I think solr-scala-client does not have enough features to use in production yet. Therefore I will improve it through use in my project.