Я использую Scala 2.12, и у нас есть Elasticsearch 5.2.2.
Мое требование - только выборка / поиск на основе критериев. Поиск вернет более 10000 документов или сообщений за один раз. Поэтому я не могу использовать обычный поиск.
Данные (каждый документ / сообщение) представляют собой сложный JSON, который я могу позже проанализировать.
Поэтому мне нужно получить все такие сообщения и сохранить их в одном списке Json или чего-то еще.
Я не очень хорошо владею Scala. Я могу использовать Elastic4s в Scala для поиска. Я вижу, что у него есть опция прокрутки и сканирования, но я не нашел полноценного рабочего примера. Так что вам нужна помощь.
Я вижу некоторый пример кода, как показано ниже, но мне нужна дополнительная помощь, чтобы извлечь все и поместить все, как указано выше:
client.execute {
search in "index" / "type" query <yourquery> scroll "1m"
}
client.execute {
search scroll <id>
}
Но как получить идентификатор прокрутки и как получить все данные?
Обновление:
Версия Scala и версия ES упомянуты выше.
Я использую следующий пример:
SBT:
libraryDependencies += "com.sksamuel.elastic4s" %% "elastic4s-core" % "7.0.2"
libraryDependencies += "com.sksamuel.elastic4s" %% "elastic4s-http" % "5.5.10"
libraryDependencies += "com.sksamuel.elastic4s" %% "elastic4s-http-streams" % "6.5.1"
libraryDependencies += "org.elasticsearch" % "elasticsearch" % "5.6.0"
Код:
import com.sksamuel.elastic4s.ElasticsearchClientUri
import com.sksamuel.elastic4s.requests.common.RefreshPolicy
import com.sksamuel.elastic4s.http.{ElasticClient, ElasticProperties}
import com.sksamuel.elastic4s.http.Response
import com.sksamuel.elastic4s.http.search.SearchResponse
import com.sksamuel.elastic4s.HttpClient
import com.sksamuel.elastic4s.http.ElasticDsl._
val client = HttpClient(ElasticsearchClientUri("host", 9200))
val resp1 = client.execute {
search("index")
.matchQuery("key", "value")
.scroll("1m")
.limit(500)
}.await.result
val resp2 = client.execute {
searchScroll(resp1.scrollId.get).keepAlive(1.minute)
}.await
Мне кажется, я не использую правильные версии для модулейastic4s.
Isuses:
import com.sksamuel.elastic4s.HttpClient: он не распознает класс HttpClient. Как показывает ошибка, HttpClient не найден при попытке инициализировать переменную client.
Далее, в моем resp2, когда я пытаюсь получить "scrollId", он не распознает это. Как получить scrollId от resp1?
В общем, чего здесь не хватает?
Обновление 2:
Я изменил версию приведенных ниже зависимостей в соответствии с примером на github (samples)
libraryDependencies += "com.sksamuel.elastic4s" %% "elastic4s-http" % "6.3.3"
Код:
val client = ElasticClient(ElasticProperties("http://host:9200"))
Теперь я получаю следующее сообщение об ошибке;
Ошибка:
Symbol 'type <none>.term.BuildableTermsQuery' is missing from the classpath.
[error] This symbol is required by 'method com.sksamuel.elastic4s.http.search.SearchHandlers.BuildableTermsNoOp'.
[error] Make sure that type BuildableTermsQuery is in your classpath and check for conflicting dependencies with `-Ylog-classpath`.
[error] A full rebuild may help if 'SearchHandlers.class' was compiled against an incompatible version of <none>.term.
[error] val client = ElasticClient(ElasticProperties("host:9200"))
[error] ^
[error] one error found
[error] (compile:compileIncremental) Compilation failed