Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

com.github.takezoe:solr-scala-client_3

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

com.github.takezoe:solr-scala-client_3

solr-scala-client

  • 0.0.27
  • Source
  • Maven
  • Socket score

Version published
Maintainers
1
Source

solr-scala-client Scala CI solr-scala-client Scala version support License

The simple Apache Solr client for Scala. This is based on the SolrJ and provides optimal interface for Scala.

Add the following dependency into your build.sbt to use solr-scala-client.

libraryDependencies += "com.github.takezoe" %% "solr-scala-client" % "0.0.26"

If you want to test SNAPSHOT version, add the following dependency instead of above:

resolvers += "sonatype-oss-snapshot" at "https://oss.sonatype.org/content/repositories/snapshots"

libraryDependencies += "com.github.takezoe" %% "solr-scala-client" % "x.x.x-SNAPSHOT"

This is a simplest example to show usage of solr-scala-client.

import com.github.takezoe.solr.scala._

val client = new SolrClient("http://localhost:8983/solr")

// register
client
  .add(Map("id"->"001", "manu" -> "Lenovo", "name" -> "ThinkPad X201s"))
  .add(Map("id"->"002", "manu" -> "Lenovo", "name" -> "ThinkPad X220"))
  .add(Map("id"->"003", "manu" -> "Lenovo", "name" -> "ThinkPad X121e"))
  .commit

// query
val result = client.query("name: %name%")
  .fields("id", "manu", "name")
  .sortBy("id", Order.asc)
  .getResultAsMap(Map("name" -> "ThinkPad"))

result.documents.foreach { doc: Map[String, Any] =>
  println("id: " + doc("id"))
  println("  manu: " + doc("manu"))
  println("  name: " + doc("name"))
}

It's also possible to use the case class as the search result and parameters instead of Map.

// query
val result = client.query("name: %name%")
  .fields("id", "manu", "name")
  .sortBy("id", Order.asc)
  .getResultAs[Product](Param(name = "ThinkPad"))

result.documents.foreach { product: Product =>
  println("id: " + product.id)
  println("  manu: " + product.manu)
  println("  name: " + product.name)
}

Query Syntax

Following notations are available to embed variables to the query:

  • %VAR_NAME% : place holder to set a single word (parameter would be escaped)
  • ?VAR_NAME? : place holder to set an expression (&, | and ! are available in an expression)
  • $VAR_NAME$ : string replacement (parameter would be not escaped)

See examples of parameterized queries and assembled Solr queries.

// %VAR_NAME% (Single keyword)
client.query("name: %name%").getResultAsMap(Map("name" -> "ThinkPad X201s"))
  // => name:"ThinkPad X201s"

// $VAR_NAME$ (String replacement)
client.query("name: $name$").getResultAsMap(Map("name" -> "ThinkPad AND X201s"))
  // => name:ThinkPad AND X201s

// ?VAR_NAME? (Expression)
client.query("name: ?name?").getResultAsMap(Map("name" -> "ThinkPad & X201s"))
  // => name:("ThinkPad" AND "X201s")

Highlight

Configure the query to return the highlighted content by QueryBuilder#highlight(). The highlighted content is set as the "highlight" property to the Map or the case class.

val result = client.query("content: Scala")
  // NOTE: unique key field is required.
  .fields("id")
  // Specify the highlighted field, prefix and postfix (prefix and postfix are optional).
  .highlight("content", "<strong>", "</strong>")
  .getResultAsMap()

result.documents.foreach { doc: Map[String, Any] =>
  println("id: " + doc("id"))
  println(doc("highlight")) // highlighted content is set as the "highlight" property
}

solr-scala-client expects that the unique key is "id". If your schema has the different field as the unique key, you can specify the unique key name as following:

val result = client.query("content: Scala")
  .id("documentId") // Specify the unique key name
  .fields("documentId")
  .highlight("content", "<strong>", "</strong>")
  .getResultAsMap()

Asynchronous API

solr-scala-client has also asynchronous API based on AsyncHttpCleint.

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()
  }

See more example at AsyncSolrClientSample.scala.

Release Notes

0.0.27 - 5 Oct 2021

  • Add sortBy overload for multiple sorting fields

0.0.26 - 14 Sep 2021

  • Fix scala-parser-combinators dependency

0.0.25 - 6 Sep 2021

  • Support Scala 3

0.0.24 - 10 Mar 2020

  • Include facetpivot in mapquery result

0.0.23 - 24 Feb 2020

  • Facet Pivot Fields support
  • Update dependent libraries

0.0.22 - 11 Dec 2019

  • Spatial parameters support

0.0.21 - 22 Jun 2019

  • Scala 2.13.0 support

0.0.20 - 13 Jan 2019

  • Scala 2.13.0-M5 support
  • Support specifying collection with transaction

0.0.19 - 4 Jun 2018

  • Add support for grouping and qTime in the response
  • Allow batch processing with a specific collection

0.0.18 - 15 Feb 2018

  • Fix response leaking bug

0.0.17 - 5 Dec 2017

  • Upgrade to SolrJ-7.1.0
  • Switch backend to OkHttp from async-http-client
  • Allow specifying collection name when building query
  • Add implementation of CloudSolrClient with and without authentication

0.0.16 - 18 Oct 2017

  • Upgrade Scala and async-http-client

0.0.15 - 22 Nov 2016

  • Scala 2.12 support and library updating

0.0.14 - 14 Aug 2016

  • Small refactoring

0.0.13 - 13 Aug 2016

  • Upgrade to SolrJ-6.1.0
  • Change group id and package name to com.github.takezoe
  • Publish to the Maven central repository

0.0.12 - 7 Feb 2015

  • Add QueryBuilderBase#fq()
  • Add QueryBuilderBase#setRequestHandler()
  • Add date facet
  • Support for streaming results

0.0.11 - 29 Mar 2014

  • Add SolrClient#shutdown()
  • QueryBuilder became immutable
  • Upgrade solrj version to 4.5.1

0.0.10 - 08 Feb 2014

  • Fix escaping in string literal.

0.0.9 - 18 Dec 2013

  • Bug fix

0.0.8 - 2 Aug 2013

  • Added recommendation search support.
  • Added rollback and withTransaction to SolrScalaClient.
  • Added Asynchronous API.

0.0.7 - 4 Apr 2013

  • Add build for Scala 2.10
  • Upgrade to SolrJ 4.2.0
  • Support highlighting

0.0.6 - 22 Jan 2013

  • Fixed some ExpressionParser bugs.

0.0.5 - 20 Nov 2012

  • ExpressionParser became pluggable and added GoogleExpressionParser as an optional implementation of ExpressionParser.
  • Converts the full-width space to the half-width space in the expression before calling ExpressionParser.
  • Introduced the SolrServer factory. Auth.basic moved to SolrServerFactory.basicAuth and SolrServerFactory.dummy for unit testing.

0.0.4 - 16 Sep 2012

  • Expanding expression to the Solr query by ?VAR_NAME? in SolrClient#query().
  • Bug fix

0.0.3 - 16 Aug 2012

  • Added case class support in update operations.
  • Added commit() method to SolrClient.

0.0.2 - 27 May 2012

  • 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.

0.0.1 - 4 May 2012

  • Initial public release.

FAQs

Package last updated on 05 Oct 2021

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc