【问题标题】:Delete documents from elasticsearch in Scala using RestClient使用 RestClient 从 Scala 中的 elasticsearch 中删除文档
【发布时间】:2020-09-08 12:19:07
【问题描述】:

我正在尝试从年龄(索引的字段)大于 50 的索引中删除文档。所以基本上我正在尝试编写范围查询。我已经从 Scala 成功连接到 ElasticSearch,而且我还可以删除整个索引。但我无法编写范围查询。有人可以帮我写一个范围查询,以便从 scala 的索引中删除文档。下面是我的代码 sn-p 删除整个索引。 我在 Java 中看到了很多示例,但我需要 SCALA 中的解决方案。

import com.sksamuel.elastic4s.delete.DeleteByQueryRequest
import org.apache.http.HttpHost
import org.apache.http.auth.{AuthScope, Credentials, UsernamePasswordCredentials}
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

System.setProperty("javax.net.ssl.trustStore", "path of certificate")
System.setProperty("javax.net.ssl.trustStorePassword", "password")

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

// Delete entire index
val request = new Request("DELETE", "/products")
val response = client.performRequest(request)

【问题讨论】:

    标签: java scala elasticsearch elasticsearch-high-level-restclient elasticsearch-rest-client


    【解决方案1】:

    我找到了解决方案。下面是我的代码 sn-p。

    import org.apache.http.HttpHost
    import org.apache.http.auth.{AuthScope, Credentials, UsernamePasswordCredentials}
    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
    import org.elasticsearch.index.query.{QueryBuilders, RangeQueryBuilder}
    import org.elasticsearch.index.reindex.DeleteByQueryRequest
    
    System.setProperty("javax.net.ssl.trustStore", "Certificate path")
    System.setProperty("javax.net.ssl.trustStorePassword", "password")
    
    val credentials = new UsernamePasswordCredentials("username", "password");
    val credentialsProvider:CredentialsProvider  = new BasicCredentialsProvider
    credentialsProvider.setCredentials(AuthScope.ANY, credentials)
    
    val builder = RestClient.builder(new HttpHost("host name", 9200,"https")).setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
          override def customizeHttpClient(httpClientBuilder: HttpAsyncClientBuilder): HttpAsyncClientBuilder = httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider)
        })
    
    var client = new RestHighLevelClient(builder)
    
    val queryBuilder = QueryBuilders.boolQuery().must(QueryBuilders.rangeQuery("age").gte("50"))
    
    val deleteRequest = new DeleteByQueryRequest("index_name").setQuery(queryBuilder)
    
    client.deleteByQuery(deleteRequest, RequestOptions.DEFAULT)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-31
      • 1970-01-01
      • 1970-01-01
      • 2017-07-20
      • 2019-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多