Как начать работу с Elastic Search с использованием клиента Scala

Привет, я новичок в Elastic Search и хочу использовать его с Scala, поэтому я нашел несколько примеров кодов на github, но были приведены очень сложные примеры, поскольку для новичка я потратил весь день, пытаясь понять этот учебник, но на В конце я запутался, как это начать, очень сложно понять то же самое, что и с другими примерами клиентов Scala.

  1. https://github.com/scalastuff/esclient
  2. https://github.com/bsadeh/scalastic
  3. https://github.com/gphat/wabisabi также я попробовал это, но оно содержит ошибку, и я также опубликовал это здесь https://stackru.com/questions/27145015/scalagetstatuscode-getresponsebody-is-not-a-member-of-dispatch-future

Все эти примеры очень сложны для нового ученика, такого как я, поскольку я прохожу первую главу Elastic Search из ее руководства, затем я хочу сделать те же самые вещи программно со Scala. Пожалуйста, предложите мне некоторую отправную точку, с которой я могу начать обучение а также есть просьба не помечать этот вопрос как неконструктивный, сначала я попробовал себя после, затем я отправляю этот вопрос. Пожалуйста, мне нужна помощь, я хочу научиться упругому поиску, используя scala

1 ответ

Проект Elastic4s содержит в верхней части файла readme простой пример использования драйвера. Этот пример представляет собой полную программу Scala, которую вы можете выполнить.

import com.sksamuel.elastic4s.ElasticClient
import 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)

}

Если это слишком сложно, то это не потому, что клиент Scala слишком сложен, а потому, что вы еще недостаточно разбираетесь в Elasticsearch или Scala. Клиент Scala, на который вы смотрите, - это типичный DSL, поэтому он использует некоторые приемы Scala, которые делают его удобным для использования в качестве клиента, но не всегда легко понять под покровом.

Вот несколько хороших ссылок на понимание Elasticsearch:

Прежде чем использовать какой-либо из драйверов Scala, вы должны хотя бы понять основные понятия индекса / типа, DSL запроса и того, что представляет собой узел в Elasticsearch. Также может быть полезно взглянуть на JSON, который вы можете отправить с помощью интерфейса HTTP, так как это немного легче увидеть, что происходит, потому что сначала документы Elasticsearch могут быть очень сложными.

Клиент простого эластичного поиска

  <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 для ES с базовой аутентификацией:

import org.apache.http.HttpHost
import org.apache.http.auth.{AuthScope, Credentials, UsernamePasswordCredentials}
import org.elasticsearch.action.admin.indices.alias.IndicesAliasesRequest
import org.elasticsearch.action.admin.indices.alias.IndicesAliasesRequest.AliasActions
import org.elasticsearch.client._
import org.apache.http.client.CredentialsProvider
import org.apache.http.impl.client.BasicCredentialsProvider
import org.apache.http.impl.nio.client.HttpAsyncClientBuilder
import org.elasticsearch.client.RestClient
import 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)
        }).build

val request = new Request(
      "GET",     
      /_cat/aliases?format=JSON )
    val response = client.performRequest(request);

 println("Response:"+response.getEntity.getContent)

client.close
Другие вопросы по тегам