13

嗨,我是 Elastic Search 的新手,我想将它与 scala 一起使用,所以我在 github 上找到了一些代码示例,但是给出了非常复杂的示例,因为对于初学者,我花了一整天的时间试图理解本教程,但在最后我很困惑如何开始这是,它与其他 Scala 客户端示例一样理解起来非常复杂

  1. https://github.com/scalastuff/esclient
  2. https://github.com/bsadeh/scalastic
  3. https://github.com/gphat/wabisabi我也试过了,但它包含错误,我也在这里发布了https://stackoverflow.com/questions/27145015/scalagetstatuscode-getresponsebody-is-not-a-member-调度未来

对于像我这样的新学习者来说,所有这些示例都非常复杂,因为我从其指南中阅读了弹性搜索的第一章,然后我想用 Scala 以编程方式做这些相同的事情。请建议我从哪里开始学习一些起点还有一个请求不要将此问题标记为非建设性首先我尝试了自己然后我发布了这个问题,请我需要帮助我想学习使用 scala 的弹性搜索

4

2 回答 2

17

Elastic4s 项目在自述文件顶部附近包含一个关于如何使用驱动程序的简单示例。这个例子是一个完整的 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 中的节点的基本概念。查看可以使用 HTTP 接口发送的 JSON 也可能会有所帮助,因为这样更容易看到发生了什么,因为 Elasticsearch 文档一开始可能很繁重。

于 2014-12-02T23:30:40.770 回答
4

简单的弹性搜索客户端

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

带有基本身份验证的 ES 的 Scala 代码:

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
于 2020-02-17T13:53:52.107 回答