Skip to content

Commit

Permalink
Updated boolean query to accept full set of options
Browse files Browse the repository at this point in the history
  • Loading branch information
sksamuel committed Jan 29, 2014
1 parent 0c45fa4 commit 0c437d4
Showing 1 changed file with 64 additions and 44 deletions.
108 changes: 64 additions & 44 deletions src/main/scala/com/sksamuel/elastic4s/queries.scala
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import org.elasticsearch.index.query.CommonTermsQueryBuilder.Operator
import org.elasticsearch.index.query.functionscore.FunctionScoreQueryBuilder
import com.sksamuel.elastic4s.DefinitionAttributes._
import scala.Some
import org.elasticsearch.common.unit.Fuzziness

/** @author Stephen Samuel */

Expand Down Expand Up @@ -44,11 +45,6 @@ trait QueryDsl {

def dismax = new DisMaxDefinition

def field(tuple: (String, Any)): FieldQueryDefinition = fieldQuery(tuple)
def field(field: String, value: Any): FieldQueryDefinition = fieldQuery(field, value)
def fieldQuery(tuple: (String, Any)): FieldQueryDefinition = fieldQuery(tuple._1, tuple._2)
def fieldQuery(field: String, value: Any): FieldQueryDefinition = new FieldQueryDefinition(field, value)

def fuzzylikethis: FuzzyLikeThisDefinitionExpectsText = flt
def flt: FuzzyLikeThisDefinitionExpectsText = new FuzzyLikeThisDefinitionExpectsText
def flt(text: String): FuzzyLikeThisExpectsField = new FuzzyLikeThisExpectsField(text)
Expand Down Expand Up @@ -168,6 +164,30 @@ class BoolQueryDefinition extends QueryDefinition {
queries.foreach(builder mustNot _.builder)
this
}
def boost(boost: Double) = {
builder.boost(boost.toFloat)
this
}
def minimumShouldMatch(minimumShouldMatch: String) = {
builder.minimumShouldMatch(minimumShouldMatch: String)
this
}
def minimumShouldMatch(minimumNumberShouldMatch: Int) = {
builder.minimumNumberShouldMatch(minimumNumberShouldMatch: Int)
this
}
def disableCoord(disableCoord: Boolean) = {
builder.disableCoord(disableCoord: Boolean)
this
}
def adjustPureNegative(adjustPureNegative: Boolean) = {
builder.adjustPureNegative(adjustPureNegative)
this
}
def queryName(queryName: String) = {
builder.queryName(queryName)
this
}
}

trait QueryDefinition {
Expand Down Expand Up @@ -263,8 +283,8 @@ class MultiMatchQueryDefinition(text: String)
class FuzzyDefinition(name: String, value: Any) extends QueryDefinition with DefinitionAttributePrefixLength {
val builder = QueryBuilders.fuzzyQuery(name, value.toString)
val _builder = builder
def minSimilarity(minSimilarity: Double) = {
builder.minSimilarity(minSimilarity.toString)
def fuzziness(fuzziness: Fuzziness) = {
builder.fuzziness(fuzziness)
this
}
def maxExpansions(maxExpansions: Int) = {
Expand Down Expand Up @@ -363,8 +383,8 @@ class FuzzyLikeThisDefinition(text: String, fields: Iterable[String])
builder.maxQueryTerms(b)
this
}
def minSimilarity(b: Double): FuzzyLikeThisDefinition = {
builder.minSimilarity(b.toFloat)
def failOnUnsupportedField(failOnUnsupportedField: Boolean): FuzzyLikeThisDefinition = {
builder.failOnUnsupportedField(failOnUnsupportedField)
this
}
}
Expand Down Expand Up @@ -854,86 +874,86 @@ class StringQueryDefinition(query: String) extends QueryDefinition with Definiti
val builder = QueryBuilders.queryString(query)
val _builder = builder

def operator(op: String): StringQueryDefinition = {
op.toLowerCase match {
case "and" => builder.defaultOperator(QueryStringQueryBuilder.Operator.AND)
case _ => builder.defaultOperator(QueryStringQueryBuilder.Operator.OR)
}
def anaylyzer(analyzer: Analyzer): StringQueryDefinition = {
builder.analyzer(analyzer.name)
this
}

def fuzzyMaxExpansions(fuzzyMaxExpansions: Int): StringQueryDefinition = {
builder.fuzzyMaxExpansions(fuzzyMaxExpansions)
def defaultField(field: String): StringQueryDefinition = {
builder.defaultField(field)
this
}

def lenient(l: Boolean): StringQueryDefinition = {
builder.lenient(java.lang.Boolean.valueOf(l))
def analyzeWildcard(analyzeWildcard: Boolean): StringQueryDefinition = {
builder.analyzeWildcard(analyzeWildcard)
this
}

def phraseSlop(phraseSlop: Int): StringQueryDefinition = {
builder.phraseSlop(phraseSlop)
def autoGeneratePhraseQueries(autoGeneratePhraseQueries: Boolean): StringQueryDefinition = {
builder.autoGeneratePhraseQueries(autoGeneratePhraseQueries)
this
}

def tieBreaker(tieBreaker: Double): StringQueryDefinition = {
builder.tieBreaker(tieBreaker.toFloat)
def allowLeadingWildcard(allowLeadingWildcard: Boolean): StringQueryDefinition = {
builder.allowLeadingWildcard(allowLeadingWildcard)
this
}

def fuzzyPrefixLength(fuzzyPrefixLength: Int): StringQueryDefinition = {
builder.fuzzyPrefixLength(fuzzyPrefixLength)
def boost(boost: Double): StringQueryDefinition = {
builder.boost(boost.toFloat)
this
}

def fuzzyMinSim(fuzzyMinSim: Double): StringQueryDefinition = {
builder.fuzzyMinSim(fuzzyMinSim.toFloat)
def enablePositionIncrements(enablePositionIncrements: Boolean): StringQueryDefinition = {
builder.enablePositionIncrements(enablePositionIncrements)
this
}

def anaylyzer(analyzer: Analyzer): StringQueryDefinition = {
builder.analyzer(analyzer.name)
def field(name: String): StringQueryDefinition = {
builder.field(name)
this
}

def defaultField(field: String): StringQueryDefinition = {
builder.defaultField(field)
def field(name: String, boost: Double): StringQueryDefinition = {
builder.field(name, boost.toFloat)
this
}

def analyzeWildcard(analyzeWildcard: Boolean): StringQueryDefinition = {
builder.analyzeWildcard(analyzeWildcard)
def fuzzyPrefixLength(fuzzyPrefixLength: Int): StringQueryDefinition = {
builder.fuzzyPrefixLength(fuzzyPrefixLength)
this
}

def autoGeneratePhraseQueries(autoGeneratePhraseQueries: Boolean): StringQueryDefinition = {
builder.autoGeneratePhraseQueries(autoGeneratePhraseQueries)
def fuzzyRewrite(fuzzyRewrite: String): StringQueryDefinition = {
builder.fuzzyRewrite(fuzzyRewrite)
this
}

def allowLeadingWildcard(allowLeadingWildcard: Boolean): StringQueryDefinition = {
builder.allowLeadingWildcard(allowLeadingWildcard)
def fuzzyMaxExpansions(fuzzyMaxExpansions: Int): StringQueryDefinition = {
builder.fuzzyMaxExpansions(fuzzyMaxExpansions)
this
}

def enablePositionIncrements(enablePositionIncrements: Boolean): StringQueryDefinition = {
builder.enablePositionIncrements(enablePositionIncrements)
def lenient(l: Boolean): StringQueryDefinition = {
builder.lenient(java.lang.Boolean.valueOf(l))
this
}

def boost(boost: Double): StringQueryDefinition = {
builder.boost(boost.toFloat)
def operator(op: String): StringQueryDefinition = {
op.toLowerCase match {
case "and" => builder.defaultOperator(QueryStringQueryBuilder.Operator.AND)
case _ => builder.defaultOperator(QueryStringQueryBuilder.Operator.OR)
}
this
}

def field(name: String): StringQueryDefinition = {
builder.field(name)
def phraseSlop(phraseSlop: Int): StringQueryDefinition = {
builder.phraseSlop(phraseSlop)
this
}

def field(name: String, boost: Double): StringQueryDefinition = {
builder.field(name, boost.toFloat)
def tieBreaker(tieBreaker: Double): StringQueryDefinition = {
builder.tieBreaker(tieBreaker.toFloat)
this
}
}
Expand Down

0 comments on commit 0c437d4

Please sign in to comment.