All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.sksamuel.elastic4s.AliasesDsl.scala Maven / Gradle / Ivy

There is a newer version: 6.0.0-rc1
Show newest version
package com.sksamuel.elastic4s

import org.elasticsearch.action.admin.indices.alias.get.{GetAliasesRequest, GetAliasesResponse}
import org.elasticsearch.action.admin.indices.alias.{IndicesAliasesRequest, IndicesAliasesResponse}
import org.elasticsearch.client.Client
import org.elasticsearch.cluster.metadata.{AliasAction, AliasMetaData}
import org.elasticsearch.index.query.QueryBuilder

import scala.concurrent.Future
import scala.language.implicitConversions

trait AliasesDsl {

  class AddAliasExpectsIndex(alias: String) {
    def on(index: String) = new MutateAliasDefinition(new AliasAction(AliasAction.Type.ADD, index, alias))
  }

  class RemoveAliasExpectsIndex(alias: String) {
    def on(index: String) = new MutateAliasDefinition(new AliasAction(AliasAction.Type.REMOVE, index, alias))
  }

  implicit object GetAliasDefinitionExecutable
    extends Executable[GetAliasDefinition, GetAliasesResponse, GetAliasesResponse] {
    override def apply(c: Client, t: GetAliasDefinition): Future[GetAliasesResponse] = {
      injectFuture(c.admin.indices.getAliases(t.build, _))
    }
  }

  implicit object MutateAliasDefinitionExecutable
    extends Executable[MutateAliasDefinition, IndicesAliasesResponse, IndicesAliasesResponse] {
    override def apply(c: Client, t: MutateAliasDefinition): Future[IndicesAliasesResponse] = {
      injectFuture(c.admin.indices.aliases(t.build, _))
    }
  }

  implicit object IndicesAliasesRequestDefinitionExecutable
    extends Executable[IndicesAliasesRequestDefinition, IndicesAliasesResponse, IndicesAliasesResponse] {
    override def apply(c: Client, t: IndicesAliasesRequestDefinition): Future[IndicesAliasesResponse] = {
      injectFuture(c.admin.indices.aliases(t.build, _))
    }
  }

  implicit def getResponseToGetResult(resp: GetAliasesResponse): GetAliasResult = new GetAliasResult(resp)
}

case class GetAliasDefinition(aliases: Seq[String]) {

  val request = new GetAliasesRequest(aliases.toArray)
  def build = request

  def on(indexes: String*): GetAliasDefinition = {
    request.indices(indexes: _*)
    this
  }
}

case class GetAliasResult(response: GetAliasesResponse) {

  import scala.collection.JavaConverters._

  def aliases: Map[String, Seq[AliasMetaData]] = {
    response.getAliases.keysIt().asScala.map(key => key -> response.getAliases.get(key).asScala.toSeq).toMap
  }
}

case class MutateAliasDefinition(aliasAction: AliasAction) {

  def routing(route: String): MutateAliasDefinition = new MutateAliasDefinition(aliasAction.routing(route))

  def filter(filter: QueryBuilder): MutateAliasDefinition = new MutateAliasDefinition(aliasAction.filter(filter))
  def filter(filter: QueryDefinition): MutateAliasDefinition = {
    new MutateAliasDefinition(aliasAction.filter(filter.builder))
  }

  def build: IndicesAliasesRequest = new IndicesAliasesRequest().addAliasAction(aliasAction)
}

case class IndicesAliasesRequestDefinition(aliasMutations: MutateAliasDefinition*) {

  def build: IndicesAliasesRequest = {
    aliasMutations.foldLeft(new IndicesAliasesRequest())((request, aliasDef) =>
      request.addAliasAction(aliasDef.aliasAction)
    )
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy