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

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

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

import org.elasticsearch.action.termvectors.TermVectorsRequest.FilterSettings
import org.elasticsearch.action.termvectors.{TermVectorsRequestBuilder, TermVectorsResponse}
import org.elasticsearch.client.Client
import org.elasticsearch.index.VersionType

import scala.concurrent.Future

trait TermVectorApi {

  implicit object TermVectorExecutable
    extends Executable[TermVectorsDefinition, TermVectorsResponse, TermVectorsResult] {
    override def apply(client: Client, t: TermVectorsDefinition): Future[TermVectorsResult] = {
      injectFutureAndMap(t.build(client.prepareTermVectors).execute)(TermVectorsResult.apply)
    }
  }
}

case class TermVectorsResult(original: TermVectorsResponse) {

  import scala.concurrent.duration._

  def fields = original.getFields
  def id: String = original.getId
  def index: String = original.getIndex
  def took: FiniteDuration = original.getTookInMillis.millis
  def `type`: String = original.getType
  def version: Long = original.getVersion
}

case class TermVectorsDefinition(indexAndTypes: IndexAndTypes,
                                 id: String,
                                 dfs: Option[Boolean] = None,
                                 fieldStatistics: Option[Boolean] = None,
                                 offsets: Option[Boolean] = None,
                                 parent: Option[String] = None,
                                 payloads: Option[Boolean] = None,
                                 positions: Option[Boolean] = None,
                                 preference: Option[String] = None,
                                 realtime: Option[Boolean] = None,
                                 routing: Option[String] = None,
                                 fields: Option[Seq[String]] = None,
                                 termStatistics: Option[Boolean] = None,
                                 version: Option[Long] = None,
                                 versionType: Option[VersionType] = None,
                                 maxNumTerms: Option[Int] = None,
                                 minTermFreq: Option[Int] = None,
                                 maxTermFreq: Option[Int] = None,
                                 minDocFreq: Option[Int] = None,
                                 maxDocFreq: Option[Int] = None,
                                 minWordLength: Option[Int] = None,
                                 maxWordLength: Option[Int] = None) {
  def build(request: TermVectorsRequestBuilder): TermVectorsRequestBuilder = {
    request.setId(id)
    request.setIndex(indexAndTypes.index)
    request.setType(indexAndTypes.types.head)
    dfs.foreach(request.setDfs)
    fieldStatistics.foreach(request.setFieldStatistics)
    offsets.foreach(request.setOffsets)
    parent.foreach(request.setParent)
    payloads.foreach(request.setPayloads)
    positions.foreach(request.setPositions)
    preference.foreach(request.setPreference)
    realtime.foreach(b => request.setRealtime(java.lang.Boolean.valueOf(b)))
    routing.foreach(request.setRouting)
    fields.foreach(fields => request.setSelectedFields(fields: _*))
    termStatistics.foreach(request.setTermStatistics)
    version.foreach(request.setVersion)
    versionType.foreach(request.setVersionType)

    val settings = new FilterSettings()
    maxNumTerms.foreach(settings.maxNumTerms = _)
    minTermFreq.foreach(settings.minTermFreq = _)
    maxTermFreq.foreach(settings.maxTermFreq = _)
    minDocFreq.foreach(settings.minDocFreq = _)
    maxDocFreq.foreach(settings.maxDocFreq = _)
    minWordLength.foreach(settings.minWordLength = _)
    maxWordLength.foreach(settings.maxWordLength = _)

    request.setFilterSettings(settings)

    request
  }

  def dfs(boolean: Boolean): TermVectorsDefinition = copy(dfs = Option(boolean))
  def fieldStatistics(boolean: Boolean): TermVectorsDefinition = copy(fieldStatistics = Option(boolean))
  def offsets(boolean: Boolean): TermVectorsDefinition = copy(offsets = Option(boolean))
  def parent(str: String): TermVectorsDefinition = copy(parent = Option(str))
  def payloads(boolean: Boolean): TermVectorsDefinition = copy(payloads = Option(boolean))
  def positions(boolean: Boolean): TermVectorsDefinition = copy(positions = Option(boolean))
  def preference(str: String): TermVectorsDefinition = copy(preference = Option(str))
  def realtime(boolean: Boolean): TermVectorsDefinition = copy(realtime = Option(boolean))
  def routing(str: String): TermVectorsDefinition = copy(routing = Option(str))
  def fields(fields: Iterable[String]): TermVectorsDefinition = copy(fields = Option(fields.toSeq))
  def fields(fields: String*): TermVectorsDefinition = copy(fields = Option(fields.toSeq))
  def termStatistics(boolean: Boolean): TermVectorsDefinition = copy(termStatistics = Option(boolean))
  def version(version: Long): TermVectorsDefinition = copy(version = Option(version))

  def maxNumTerms(maxNumTerms: Int): TermVectorsDefinition = copy(maxNumTerms = Option(maxNumTerms))
  def minTermFreq(minTermFreq: Int): TermVectorsDefinition = copy(minTermFreq = Option(minTermFreq))
  def maxTermFreq(maxTermFreq: Int): TermVectorsDefinition = copy(maxTermFreq = Option(maxTermFreq))
  def minDocFreq(minDocFreq: Int): TermVectorsDefinition = copy(minDocFreq = Option(minDocFreq))
  def maxDocFreq(maxDocFreq: Int): TermVectorsDefinition = copy(maxDocFreq = Option(maxDocFreq))
  def minWordLength(minWordLength: Int): TermVectorsDefinition = copy(minWordLength = Option(minWordLength))
  def maxWordLength(maxWordLength: Int): TermVectorsDefinition = copy(maxWordLength = Option(maxWordLength))
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy