queryNode
inline fun <N : QueryExpressionNode<N>> queryNode(handle: NodeHandle<N>, block: (N) -> Unit): T
Content copied to clipboard
Allows modifying specific query expression node using handle of the node.
Samples
import dev.evo.elasticmagic.SearchQuery
import dev.evo.elasticmagic.aggs.HistogramAgg
import dev.evo.elasticmagic.aggs.TermsAgg
import dev.evo.elasticmagic.doc.Document
import dev.evo.elasticmagic.query.Bool
import dev.evo.elasticmagic.query.FunctionScore
import dev.evo.elasticmagic.query.FunctionScoreNode
import dev.evo.elasticmagic.query.MatchPhrase
import dev.evo.elasticmagic.query.MultiMatch
import dev.evo.elasticmagic.query.NodeHandle
import dev.evo.elasticmagic.query.QueryRescore
import dev.evo.elasticmagic.query.match
import kotlin.random.Random
fun main() {
//sampleStart
val BOOST_HANDLE = NodeHandle<FunctionScoreNode>()
searchQuery.query(
FunctionScoreNode(
BOOST_HANDLE,
query = MultiMatch("system", listOf(UserDoc.name, UserDoc.about)),
functions = listOf(
FunctionScore.FieldValueFactor(
UserDoc.rank,
missing = 1.0F,
factor = 2.0,
modifier = FunctionScore.FieldValueFactor.Modifier.LN1P
)
),
scoreMode = FunctionScore.ScoreMode.SUM,
)
)
val boostActive = Random.nextBoolean()
if (boostActive) {
// Move active users the top
searchQuery.queryNode(BOOST_HANDLE) {
it.functions.add(
FunctionScore.Weight(
1000.0,
filter = UserDoc.isActive.eq(true)
)
)
}
}
//sampleEnd
}Parameters
handle
a handle bound to the specific query expression node.
block
a function that modifies the query expression node.
Throws
IllegalArgumentException
if a node specified by the handle is missing.