how to get started with Elastic Search using scala client
The Elastic4s project contains, near the top of the readme, a simple example on how to use the driver. This example is a complete Scala program that you can execute.
import com.sksamuel.elastic4s.ElasticClientimport com.sksamuel.elastic4s.ElasticDsl._object Test extends App { val client = ElasticClient.local // await is a helper method to make this operation sync instead of async // You would normally avoid doing this in a real program as it will block client.execute { index into "bands/artists" fields "name"->"coldplay" }.await val resp = client.execute { search in "bands/artists" query "coldplay" }.await println(resp)}
If this is too complicated, then that is not because the Scala client is too complicated, but because you don't yet understand enough about Elasticsearch or Scala. The Scala client you are looking at is a typical DSL so it uses some Scala tricks that make it nice to use as a client, but not necessarily easy to to understand under the covers.
Here are some good links to understanding Elasticsearch:
- http://spinscale.github.io/elasticsearch/2012-03-jugm.html#/20
- http://exploringelasticsearch.com/
- http://joelabrahamsson.com/elasticsearch-101/
- http://www.slideshare.net/karmi/your-data-your-search-elasticsearch-euruko-2011
Before you use any of the Scala drivers, you should at least understand the basic concepts of an index/type, the query DSL, and what a node is in Elasticsearch. It might also be helpful to look at the JSON that you can send with the HTTP interface as that is a bit easier to see what is going on, because the Elasticsearch docs can be heavy going at first.
Simple elastic search client
<dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>7.5.0</version> </dependency> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>7.5.0</version> </dependency>
Scala code to ES with basic auth:
import org.apache.http.HttpHostimport org.apache.http.auth.{AuthScope, Credentials, UsernamePasswordCredentials}import org.elasticsearch.action.admin.indices.alias.IndicesAliasesRequestimport org.elasticsearch.action.admin.indices.alias.IndicesAliasesRequest.AliasActionsimport org.elasticsearch.client._import org.apache.http.client.CredentialsProviderimport org.apache.http.impl.client.BasicCredentialsProviderimport org.apache.http.impl.nio.client.HttpAsyncClientBuilderimport org.elasticsearch.client.RestClientimport org.elasticsearch.client.RestClientBuilder val credentials = new UsernamePasswordCredentials("<username>", "<password>"); val credentialsProvider:CredentialsProvider = new BasicCredentialsProvider credentialsProvider.setCredentials(AuthScope.ANY, credentials) val client = RestClient.builder(new HttpHost("<host>", 9200,"https")).setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() { override def customizeHttpClient(httpClientBuilder: HttpAsyncClientBuilder): HttpAsyncClientBuilder = httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider) }).buildval request = new Request( "GET", /_cat/aliases?format=JSON ) val response = client.performRequest(request); println("Response:"+response.getEntity.getContent)client.close