Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -188,4 +188,58 @@ class IntervalsQueryBuilderFnTest extends AnyFunSuite with Matchers with GivenWh
Then("query should have right fields")
queryBody.string should matchJson(expected)
}

test("Should correctly build intervals boosted query") {
Given("An intervals query with boost set")
val query = IntervalsQuery(
"my_text",
AllOf(List(
Match(query = "my favorite food").maxGaps(0).ordered(true),
AnyOf(intervals =
List(
Match(query = "hot water"),
Match(query = "cold porridge")
)
)
)).ordered(true),
Some(2.5D)
)

When("Intervals query is built")
val queryBody = IntervalsQueryBuilderFn(query)

Then("query should have right fields and boost set")
queryBody.string should matchJson(intervalsBoostedQuery)
}

def intervalsBoostedQuery: String =
"""
|{
| "intervals" : {
| "my_text" : {
| "boost": 2.5,
| "all_of" : {
| "ordered" : true,
| "intervals" : [
| {
| "match" : {
| "query" : "my favorite food",
| "max_gaps" : 0,
| "ordered" : true
| }
| },
| {
| "any_of" : {
| "intervals" : [
| { "match" : { "query" : "hot water" } },
| { "match" : { "query" : "cold porridge" } }
| ]
| }
| }
| ]
| }
| }
| }
|}
""".stripMargin.replace("\n", "")
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package com.sksamuel.elastic4s.requests.searches.queries
import com.sksamuel.elastic4s.requests.script.Script
import com.sksamuel.elastic4s.ext.OptionImplicits._

case class IntervalsQuery(field: String, rule: IntervalsRule) extends Query
case class IntervalsQuery(field: String, rule: IntervalsRule, boost: Option[Double] = None) extends Query

sealed trait IntervalsRule
case class Match(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,13 @@ object IntervalsQueryBuilderFn {
def apply(q: IntervalsQuery): XContentBuilder = {
val builder = XContentFactory.jsonBuilder()
builder.startObject("intervals")
builder.rawField(q.field, IntervalsRuleBuilderFn(q.rule))
builder.rawField(
q.field, {
val ruleBuilder = IntervalsRuleBuilderFn(q.rule)
q.boost.foreach(ruleBuilder.field("boost", _))
ruleBuilder
}
)
builder.endObject()
}
}