Удалите документы из elasticsearch в Scala с помощью RestClient

Я пытаюсь удалить документы из индекса, возраст которых (поле индекса) больше 50. Поэтому в основном я пытаюсь написать запрос диапазона. Я успешно подключился к ElasticSearch из Scala, а также могу удалить весь индекс. Но я не могу написать запрос диапазона. Может ли кто-нибудь помочь мне написать запрос диапазона для удаления документов из индекса в 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)

person Basant Jain    schedule 21.05.2020    source источник


Ответы (1)


Я нашел решение. Ниже мой фрагмент кода.

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)
person Basant Jain    schedule 22.05.2020