簡體   English   中英

使用 RestClient 從 Scala 中的 elasticsearch 中刪除文檔

[英]Delete documents from elasticsearch in Scala using RestClient

我正在嘗試從年齡(索引的字段)大於 50 的索引中刪除文檔。所以基本上我正在嘗試編寫范圍查詢。 我已經從 Scala 成功連接到 ElasticSearch 並且我還可以刪除整個索引。 但我無法編寫范圍查詢。 有人可以幫我寫一個范圍查詢,以從 scala 的索引中刪除文檔。 下面是我刪除整個索引的代碼片段。 我在 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)

我找到了解決方案。 下面是我的代碼片段。

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM