Как начать работу с Elastic Search с использованием клиента Scala
Привет, я новичок в Elastic Search и хочу использовать его с Scala, поэтому я нашел несколько примеров кодов на github, но были приведены очень сложные примеры, поскольку для новичка я потратил весь день, пытаясь понять этот учебник, но на В конце я запутался, как это начать, очень сложно понять то же самое, что и с другими примерами клиентов Scala.
- https://github.com/scalastuff/esclient
- https://github.com/bsadeh/scalastic
- 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:
- http://spinscale.github.io/elasticsearch/2012-03-jugm.html
- http://exploringelasticsearch.com/
- http://joelabrahamsson.com/elasticsearch-101/
- http://www.slideshare.net/karmi/your-data-your-search-elasticsearch-euruko-2011
Прежде чем использовать какой-либо из драйверов 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