From 6d36d1bf33a2e95f45a48b26b9190179f69af984 Mon Sep 17 00:00:00 2001 From: philippus Date: Fri, 14 Jun 2024 20:19:07 +0200 Subject: [PATCH] Support versionType parameter in reindex request --- .../requests/reindex/ReindexBuilderFnTest.scala | 17 +++++++++++++++++ .../requests/reindex/ReindexRequest.scala | 9 ++++++--- .../handlers/reindex/ReindexBuilderFn.scala | 2 ++ 3 files changed, 25 insertions(+), 3 deletions(-) create mode 100644 elastic4s-core/src/test/scala/com/sksamuel/elastic4s/requests/reindex/ReindexBuilderFnTest.scala diff --git a/elastic4s-core/src/test/scala/com/sksamuel/elastic4s/requests/reindex/ReindexBuilderFnTest.scala b/elastic4s-core/src/test/scala/com/sksamuel/elastic4s/requests/reindex/ReindexBuilderFnTest.scala new file mode 100644 index 000000000..67ad5553a --- /dev/null +++ b/elastic4s-core/src/test/scala/com/sksamuel/elastic4s/requests/reindex/ReindexBuilderFnTest.scala @@ -0,0 +1,17 @@ +package com.sksamuel.elastic4s.requests.reindex + +import com.sksamuel.elastic4s.handlers.reindex.ReindexBuilderFn +import com.sksamuel.elastic4s.requests.common.VersionType.ExternalGte +import org.scalatest.funsuite.AnyFunSuite +import org.scalatest.matchers.should.Matchers + +class ReindexBuilderFnTest extends AnyFunSuite with Matchers { + import com.sksamuel.elastic4s.ElasticApi._ + + test("reindex content builder should support version type") { + val req = reindex("source", "target").versionType(ExternalGte) + + ReindexBuilderFn(req).string shouldBe + """{"source":{"index":["source"]},"dest":{"index":"target","version_type":"external_gte"}}""".stripMargin + } +} diff --git a/elastic4s-domain/src/main/scala/com/sksamuel/elastic4s/requests/reindex/ReindexRequest.scala b/elastic4s-domain/src/main/scala/com/sksamuel/elastic4s/requests/reindex/ReindexRequest.scala index f8f8a46b1..16e7c9329 100644 --- a/elastic4s-domain/src/main/scala/com/sksamuel/elastic4s/requests/reindex/ReindexRequest.scala +++ b/elastic4s-domain/src/main/scala/com/sksamuel/elastic4s/requests/reindex/ReindexRequest.scala @@ -1,11 +1,10 @@ package com.sksamuel.elastic4s.requests.reindex import com.sksamuel.elastic4s.ext.OptionImplicits._ -import com.sksamuel.elastic4s.requests.common.{RefreshPolicy, Slice} +import com.sksamuel.elastic4s.requests.common.{RefreshPolicy, Slice, VersionType} import com.sksamuel.elastic4s.requests.script.Script import com.sksamuel.elastic4s.requests.searches.queries.Query import com.sksamuel.elastic4s.{Index, Indexes} - import scala.concurrent.duration.FiniteDuration case class ReindexRequest(sourceIndexes: Indexes, @@ -30,7 +29,8 @@ case class ReindexRequest(sourceIndexes: Indexes, size: Option[Int] = None, createOnly: Option[Boolean] = None, slices: Option[Int] = None, - slice: Option[Slice] = None) { + slice: Option[Slice] = None, + versionType: Option[VersionType] = None) { def remote(uri: String): ReindexRequest = copy(remoteHost = Option(uri)) def remote(uri: String, user: String, pass: String): ReindexRequest = @@ -73,4 +73,7 @@ case class ReindexRequest(sourceIndexes: Indexes, def createOnly(createOnly: Boolean): ReindexRequest = copy(createOnly = createOnly.some) def slice(slice: Slice): ReindexRequest = copy(slice = slice.some) def slices(slices: Int): ReindexRequest = copy(slices = slices.some) + + def versionType(versionType: String): ReindexRequest = this.versionType(VersionType.valueOf(versionType)) + def versionType(versionType: VersionType): ReindexRequest = copy(versionType = versionType.some) } diff --git a/elastic4s-handlers/src/main/scala/com/sksamuel/elastic4s/handlers/reindex/ReindexBuilderFn.scala b/elastic4s-handlers/src/main/scala/com/sksamuel/elastic4s/handlers/reindex/ReindexBuilderFn.scala index 69b42f926..1153fddad 100644 --- a/elastic4s-handlers/src/main/scala/com/sksamuel/elastic4s/handlers/reindex/ReindexBuilderFn.scala +++ b/elastic4s-handlers/src/main/scala/com/sksamuel/elastic4s/handlers/reindex/ReindexBuilderFn.scala @@ -49,6 +49,8 @@ object ReindexBuilderFn { builder.startObject("dest") builder.field("index", request.targetIndex.name) + request.versionType.foreach(versionType => builder.field("version_type", handlers.VersionTypeHttpString(versionType))) + request.createOnly.foreach { case true => builder.field("op_type", "create") case false => builder.field("op_type", "index")