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

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

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

import org.elasticsearch.action.get.GetResponse
import org.elasticsearch.client.{Client, Requests}
import org.elasticsearch.index.VersionType
import org.elasticsearch.index.get.GetField
import org.elasticsearch.search.fetch.source.FetchSourceContext

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

/** @author Stephen Samuel */
trait GetDsl {

  class GetWithIdExpectsFrom(id: String) {
    def from(index: IndexAndTypes): GetDefinition = new GetDefinition(index, id)
  }

  implicit object GetDefinitionExecutable extends Executable[GetDefinition, GetResponse, RichGetResponse] {
    override def apply(c: Client, t: GetDefinition): Future[RichGetResponse] = {
      injectFutureAndMap(c.get(t.build, _))(RichGetResponse)
    }
  }
}

case class GetDefinition(indexTypes: IndexAndTypes, id: String) {

  private val _builder = Requests.getRequest(indexTypes.index).`type`(indexTypes.types.headOption.orNull).id(id)
  def build = _builder

  def fetchSourceContext(context: Boolean) = {
    _builder.fetchSourceContext(new FetchSourceContext(context))
    this
  }

  def fetchSourceContext(context: FetchSourceContext) = {
    _builder.fetchSourceContext(context)
    this
  }

  def fields(fs: String*): GetDefinition = fields(fs)
  def fields(fs: Iterable[String]): GetDefinition = {
    _builder.fields(fs.toSeq: _*)
    this
  }

  def ignoreErrorsOnGeneratedFields(ignoreErrorsOnGeneratedFields: Boolean) = {
    _builder.ignoreErrorsOnGeneratedFields(ignoreErrorsOnGeneratedFields)
    this
  }

  def parent(p: String) = {
    _builder.parent(p)
    this
  }

  def preference(pref: Preference): GetDefinition = preference(pref.elastic)
  def preference(pref: String): GetDefinition = {
    _builder.preference(pref)
    this
  }

  def realtime(r: Boolean) = {
    _builder.realtime(r)
    this
  }

  def refresh(refresh: Boolean) = {
    _builder.refresh(refresh)
    this
  }

  def routing(r: String) = {
    _builder.routing(r)
    this
  }

  def version(version: Long) = {
    _builder.version(version)
    this
  }

  def versionType(versionType: VersionType) = {
    _builder.versionType(versionType)
    this
  }
}

case class RichGetResponse(original: GetResponse) {

  import scala.collection.JavaConverters._

  // java method aliases
  def getField(name: String): GetField = field(name)
  def getFields = original.getFields
  def getId: String = id
  def getIndex: String = index
  def getType: String = `type`
  def getVersion: Long = version

  def field(name: String): GetField = original.getField(name)
  def fieldOpt(name: String): Option[GetField] = Option(field(name))

  def fields: Map[String, GetField] = Option(original.getFields).fold(Map.empty[String, GetField])(_.asScala.toMap)

  def id: String = original.getId
  def index: String = original.getIndex

  def source = original.getSource
  def sourceAsBytes = original.getSourceAsBytes
  def sourceAsString: String = original.getSourceAsString

  def `type`: String = original.getType
  def version: Long = original.getVersion

  def isExists: Boolean = original.isExists
  def isSourceEmpty: Boolean = original.isSourceEmpty
  def iterator: Iterator[GetField] = original.iterator.asScala
}

case class RichGetField(original: GetField) extends AnyVal {

  import scala.collection.JavaConverters._

  def name: String = original.getName
  def value: AnyRef = original.getValue
  def values: Seq[AnyRef] = original.getValues.asScala
  def isMetadataField: Boolean = original.isMetadataField
  def iterator: Iterator[AnyRef] = original.iterator.asScala
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy