Elastic4s java.lang.NoSuchMethodError

242 views Asked by At

I am attempting to connect to an ES cluster through Elastic4s. I am using the example given in the github repo:

import com.sksamuel.elastic4s.ElasticClient
import com.sksamuel.elastic4s.ElasticDsl._

object Test extends App {

  val client = ElasticClient.transport(ElasticsearchClientUri(host, port))

  // await is a helper method to make this operation synchronous instead of async
  // You would normally avoid doing this in a real program as it will block your thread
  client.execute { index into "bands" / "artists" fields "name"->"coldplay" }.await

  // we need to wait until the index operation has been flushed by the server.
  // this is an important point - when the index future completes, that doesn't mean that the doc
  // is necessarily searchable. It simply means the server has processed your request and the doc is
  // queued to be flushed to the indexes. Elasticsearch is eventually consistent.
  // For this demo, we'll simply wait for 2 seconds (default refresh interval is 1 second).
  Thread.sleep(2000)

  // now we can search for the document we indexed earlier
  val resp = client.execute { search in "bands" / "artists" query "coldplay" }.await
  println(resp)

}

The client accepts connections on 9434 as described in here - https://www.elastic.co/guide/en/cloud/current/security.html#security-transport

Furthermore it looks for a or appends - depending on the construction way chosen - elasticsearch:\\ to the host and port.

Upon running even the line that initializes the Client I get Exception in thread "main" java.lang.NoSuchMethodError: scala.Predef$.refArrayOps([Ljava/lang/Object;)[Ljava/lang/Object;

Clearly I am misunderstanding something. Please let me know what I am doing wrong.

EDIT:

As validation I have a .Net client to ES that uses the regular http connection.

var node = new Uri(url);
var connectionSettings = new ConnectionSettings(node);
connectionSettings.BasicAuthentication(settings.username,settings.password);
client = new ElasticClient(connectionSettings);

I am aiming to achieve the same.

1

There are 1 answers

0
Stephen Carman On BEST ANSWER

That would appear you are missing the scala-library in your dependencies. So depending on what version of Scala you are using you have to have your deps match that. What build tool are you using?

SBT (you shouldn't need to do this, SBT Should do it automatically based on your scalaVersion)

"org.scala-lang" % "scala-library" % "YOUR SCALA VERSION"

Maven

<dependency>
    <groupId>org.scala-lang</groupId>
    <artifactId>scala-library</artifactId>
    <version>2.12.1</version>
</dependency>

SBT also has some information here, http://www.scala-sbt.org/1.0/docs/Configuring-Scala.html