QueryVariantDsl

class QueryVariantDsl(add: (queryVariant: QueryVariant) -> Unit)

Type-safe DSL for building Elasticsearch queries using metamodel-based field references.

This DSL provides a fluent, Kotlin-idiomatic API for constructing Elasticsearch queries with compile-time type safety. Instead of using string-based field names, queries are built using generated metamodel field references, preventing runtime errors from typos or incorrect field paths.

Key Features

  • Type-safe field references: Use metamodel properties instead of string literals

  • Fluent query composition: Chain query builders with infix operators

  • Nested and object field support: Navigate complex document structures with dot notation

  • Comprehensive query coverage: Support for all major Elasticsearch query types

Supported Query Types

Elasticsearch Query dsl documentation

See also

for boolean query composition

Constructors

Link copied to clipboard
constructor(add: (queryVariant: QueryVariant) -> Unit)

Types

Link copied to clipboard
object Companion

Functions

Link copied to clipboard
fun bool(block: BoolQueryDsl.() -> Unit)

Creates a nested BoolQuery inside the current typed occurrence of the BoolQueryDsl

Link copied to clipboard
fun Collection<Metamodel<*>>.combinedFields(value: String?, block: CombinedFieldsQuery.Builder.() -> Unit = {})
Link copied to clipboard
fun Metamodel<*>.commonTerms(value: String?, block: CommonTermsQuery.Builder.() -> Unit = {})

creates Common terms query

Link copied to clipboard
infix fun DateField<out Collection<Date>>.containsMatch(value: Date?)
infix fun Metamodel<out Collection<*>>.containsMatch(value: FieldValue?)
infix fun <T : Enum<T>> Metamodel<out Collection<T>>.containsMatch(value: Enum<T>?)
infix fun Metamodel<out Collection<Float>>.containsMatch(value: Float?)
infix fun Metamodel<out Collection<Int>>.containsMatch(value: Int?)
infix fun Metamodel<out Collection<Long>>.containsMatch(value: Long?)
fun DateField<out Collection<Instant>>.containsMatch(value: Instant?, block: MatchQuery.Builder.() -> Unit = {})
fun DateField<out Collection<LocalDateTime>>.containsMatch(value: LocalDateTime?, block: MatchQuery.Builder.() -> Unit = {})
fun DateField<out Collection<LocalDate>>.containsMatch(value: LocalDate?, block: MatchQuery.Builder.() -> Unit = {})
fun DateField<out Collection<OffsetDateTime>>.containsMatch(value: OffsetDateTime?, block: MatchQuery.Builder.() -> Unit = {})
fun DateField<out Collection<ZonedDateTime>>.containsMatch(value: ZonedDateTime?, block: MatchQuery.Builder.() -> Unit = {})
fun DateField<out Collection<Date>>.containsMatch(value: Date?, block: MatchQuery.Builder.() -> Unit = {})
fun Metamodel<out Collection<*>>.containsMatch(value: FieldValue?, block: MatchQuery.Builder.() -> Unit = {})
fun <T : Enum<T>> Metamodel<out Collection<T>>.containsMatch(value: Enum<T>?, block: MatchQuery.Builder.() -> Unit = {})
fun Metamodel<out Collection<Boolean>>.containsMatch(value: Boolean?, block: MatchQuery.Builder.() -> Unit = {})
fun Metamodel<out Collection<Double>>.containsMatch(value: Double?, block: MatchQuery.Builder.() -> Unit = {})
fun Metamodel<out Collection<Float>>.containsMatch(value: Float?, block: MatchQuery.Builder.() -> Unit = {})
fun Metamodel<out Collection<Int>>.containsMatch(value: Int?, block: MatchQuery.Builder.() -> Unit = {})
fun Metamodel<out Collection<Long>>.containsMatch(value: Long?, block: MatchQuery.Builder.() -> Unit = {})
fun Metamodel<out Collection<String>>.containsMatch(value: String?, block: MatchQuery.Builder.() -> Unit = {})

creates Match query

Link copied to clipboard
infix fun DateField<out Collection<Date>>.containsTerm(value: Date?)
infix fun Metamodel<out Collection<*>>.containsTerm(value: FieldValue?)
infix fun <T : Enum<T>> Metamodel<out Collection<T>>.containsTerm(value: Enum<T>?)
infix fun Metamodel<out Collection<Double>>.containsTerm(value: Double?)
infix fun Metamodel<out Collection<Float>>.containsTerm(value: Float?)
infix fun Metamodel<out Collection<Int>>.containsTerm(value: Int?)
infix fun Metamodel<out Collection<Long>>.containsTerm(value: Long?)
infix fun Metamodel<out Collection<String>>.containsTerm(value: String?)
fun DateField<out Collection<Instant>>.containsTerm(value: Instant?, block: TermQuery.Builder.() -> Unit = {})
fun DateField<out Collection<LocalDateTime>>.containsTerm(value: LocalDateTime?, block: TermQuery.Builder.() -> Unit = {})
fun DateField<out Collection<LocalDate>>.containsTerm(value: LocalDate?, block: TermQuery.Builder.() -> Unit = {})
fun DateField<out Collection<OffsetDateTime>>.containsTerm(value: OffsetDateTime?, block: TermQuery.Builder.() -> Unit = {})
fun DateField<out Collection<ZonedDateTime>>.containsTerm(value: ZonedDateTime?, block: TermQuery.Builder.() -> Unit = {})
fun DateField<out Collection<Date>>.containsTerm(value: Date?, block: TermQuery.Builder.() -> Unit = {})
fun Metamodel<out Collection<*>>.containsTerm(value: FieldValue?, block: TermQuery.Builder.() -> Unit = {})
fun <T : Enum<T>> Metamodel<out Collection<T>>.containsTerm(value: Enum<T>?, block: TermQuery.Builder.() -> Unit = {})
fun Metamodel<out Collection<Boolean>>.containsTerm(value: Boolean?, block: TermQuery.Builder.() -> Unit = {})
fun Metamodel<out Collection<Double>>.containsTerm(value: Double?, block: TermQuery.Builder.() -> Unit = {})
fun Metamodel<out Collection<Float>>.containsTerm(value: Float?, block: TermQuery.Builder.() -> Unit = {})
fun Metamodel<out Collection<Int>>.containsTerm(value: Int?, block: TermQuery.Builder.() -> Unit = {})
fun Metamodel<out Collection<Long>>.containsTerm(value: Long?, block: TermQuery.Builder.() -> Unit = {})
fun Metamodel<out Collection<String>>.containsTerm(value: String?, block: TermQuery.Builder.() -> Unit = {})

creates Term query

Link copied to clipboard
fun DateField<out Collection<Date>>.containsTerms(vararg terms: Date)
infix fun Metamodel<out Collection<*>>.containsTerms(terms: Collection<FieldValue>?)
@JvmName(name = "containsTermsEnum")
infix fun <T : Enum<T>> Metamodel<out Collection<T>>.containsTerms(terms: Collection<T>?)
fun <T : Enum<T>> Metamodel<out Collection<T>>.containsTerms(vararg terms: T)
fun Metamodel<out Collection<Float>>.containsTerms(vararg terms: Float)
fun Metamodel<out Collection<Int>>.containsTerms(vararg terms: Int)
fun Metamodel<out Collection<Long>>.containsTerms(vararg terms: Long)
@JvmName(name = "containsTermsString")
infix fun Metamodel<out Collection<String>>.containsTerms(terms: Collection<String>?)
fun DateField<out Collection<Instant>>.containsTerms(vararg terms: Instant, block: TermsQuery.Builder.() -> Unit = {})
fun DateField<out Collection<LocalDateTime>>.containsTerms(vararg terms: LocalDateTime, block: TermsQuery.Builder.() -> Unit = {})
fun DateField<out Collection<LocalDate>>.containsTerms(vararg terms: LocalDate, block: TermsQuery.Builder.() -> Unit = {})
fun DateField<out Collection<OffsetDateTime>>.containsTerms(vararg terms: OffsetDateTime, block: TermsQuery.Builder.() -> Unit = {})
fun DateField<out Collection<ZonedDateTime>>.containsTerms(vararg terms: ZonedDateTime, block: TermsQuery.Builder.() -> Unit = {})
fun DateField<out Collection<Date>>.containsTerms(vararg terms: Date, block: TermsQuery.Builder.() -> Unit = {})
fun Metamodel<out Collection<*>>.containsTerms(terms: Collection<FieldValue>?, block: TermsQuery.Builder.() -> Unit = {})
@JvmName(name = "containsTermsEnumWithBlock")
fun <T : Enum<T>> Metamodel<out Collection<T>>.containsTerms(terms: Collection<T>?, block: TermsQuery.Builder.() -> Unit = {})
fun <T : Enum<T>> Metamodel<out Collection<T>>.containsTerms(vararg terms: T, block: TermsQuery.Builder.() -> Unit = {})
fun Metamodel<out Collection<Boolean>>.containsTerms(vararg terms: Boolean, block: TermsQuery.Builder.() -> Unit = {})
fun Metamodel<out Collection<Double>>.containsTerms(vararg terms: Double, block: TermsQuery.Builder.() -> Unit = {})
fun Metamodel<out Collection<Float>>.containsTerms(vararg terms: Float, block: TermsQuery.Builder.() -> Unit = {})
fun Metamodel<out Collection<Int>>.containsTerms(vararg terms: Int, block: TermsQuery.Builder.() -> Unit = {})
fun Metamodel<out Collection<Long>>.containsTerms(vararg terms: Long, block: TermsQuery.Builder.() -> Unit = {})
@JvmName(name = "containsTermsStringWithBlock")
fun Metamodel<out Collection<String>>.containsTerms(terms: Collection<String>?, block: TermsQuery.Builder.() -> Unit = {})
fun Metamodel<out Collection<String>>.containsTerms(vararg terms: String, block: TermsQuery.Builder.() -> Unit = {})

creates Terms query

Link copied to clipboard
fun disMax(disMax: DisMaxQuery.Builder.() -> Unit = {}, block: QueryVariantDsl.() -> Unit)
Link copied to clipboard
fun Metamodel<*>.exist()

creates Exists query

Link copied to clipboard
infix fun Metamodel<*>.fuzzy(value: FieldValue?)
fun Metamodel<*>.fuzzy(value: FieldValue?, block: FuzzyQuery.Builder.() -> Unit = {})

creates Fuzzy query

Link copied to clipboard
fun Metamodel<*>.geoDistance(latitude: Double, longitude: Double, distance: Double, unit: DistanceUnit = DistanceUnit.Kilometers, block: GeoDistanceQuery.Builder.() -> Unit = {})
Link copied to clipboard
infix fun <T : Comparable<T>> Metamodel<T>.greaterThan(value: T?)

creates Range query

Link copied to clipboard
infix fun <T : Comparable<T>> Metamodel<T>.greaterThanEqualTo(value: T?)

creates Range query

Link copied to clipboard
fun idsQuery(ids: List<String>?)

creates IDs query

Link copied to clipboard
infix fun <T : Comparable<T>> Metamodel<T>.lowerThan(value: T?)

creates Range query

Link copied to clipboard
infix fun <T : Comparable<T>> Metamodel<T>.lowerThanEqualTo(value: T?)

creates Range query

Link copied to clipboard
infix fun DateField<Instant>.match(value: Instant?)
infix fun DateField<LocalDate>.match(value: LocalDate?)
infix fun DateField<Date>.match(value: Date?)
infix fun Metamodel<*>.match(value: FieldValue?)
infix fun <T : Enum<T>> Metamodel<T>.match(value: Enum<T>?)
infix fun Metamodel<Boolean>.match(value: Boolean?)
infix fun Metamodel<Double>.match(value: Double?)
infix fun Metamodel<Float>.match(value: Float?)
infix fun Metamodel<Int>.match(value: Int?)
infix fun Metamodel<Long>.match(value: Long?)
infix fun Metamodel<String>.match(value: String?)
fun DateField<Instant>.match(value: Instant?, block: MatchQuery.Builder.() -> Unit = {})
fun DateField<LocalDateTime>.match(value: LocalDateTime?, block: MatchQuery.Builder.() -> Unit = {})
fun DateField<LocalDate>.match(value: LocalDate?, block: MatchQuery.Builder.() -> Unit = {})
fun DateField<OffsetDateTime>.match(value: OffsetDateTime?, block: MatchQuery.Builder.() -> Unit = {})
fun DateField<ZonedDateTime>.match(value: ZonedDateTime?, block: MatchQuery.Builder.() -> Unit = {})
fun DateField<Date>.match(value: Date?, block: MatchQuery.Builder.() -> Unit = {})
fun Metamodel<*>.match(value: FieldValue?, block: MatchQuery.Builder.() -> Unit = {})
fun <T : Enum<T>> Metamodel<T>.match(value: Enum<T>?, block: MatchQuery.Builder.() -> Unit = {})
fun Metamodel<Boolean>.match(value: Boolean?, block: MatchQuery.Builder.() -> Unit = {})
fun Metamodel<Double>.match(value: Double?, block: MatchQuery.Builder.() -> Unit = {})
fun Metamodel<Float>.match(value: Float?, block: MatchQuery.Builder.() -> Unit = {})
fun Metamodel<Int>.match(value: Int?, block: MatchQuery.Builder.() -> Unit = {})
fun Metamodel<Long>.match(value: Long?, block: MatchQuery.Builder.() -> Unit = {})
fun Metamodel<String>.match(value: String?, block: MatchQuery.Builder.() -> Unit = {})

creates Match query

Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
infix fun <T : Any> Metamodel<T>.matchPhrase(value: String?)
fun Metamodel<*>.matchPhrase(value: String?, block: MatchPhraseQuery.Builder.() -> Unit = {})
Link copied to clipboard
infix fun Metamodel<*>.matchPhrasePrefix(value: String?)
fun Metamodel<*>.matchPhrasePrefix(value: String?, block: MatchPhrasePrefixQuery.Builder.() -> Unit = {})
Link copied to clipboard
fun Collection<Metamodel<*>>.moreLikeThis(block: MoreLikeThisQuery.Builder.() -> Unit = {})
Link copied to clipboard
infix fun Collection<Metamodel<*>>.multiMatch(value: String?)
fun Collection<Metamodel<*>>.multiMatch(value: String?, block: MultiMatchQuery.Builder.() -> Unit = {})
Link copied to clipboard
fun <T : Comparable<T>> T?.mustBeBetween(from: Metamodel<T>, to: Metamodel<T>)

creates Range query

Link copied to clipboard
fun Container<*>.nested(setupBlock: NestedQuery.Builder.() -> Unit = {}, block: BoolQueryDsl.() -> Unit)

creates Nested query

Link copied to clipboard
infix fun Metamodel<*>.prefix(value: String?)
fun Metamodel<*>.prefix(value: String?, block: PrefixQuery.Builder.() -> Unit = {})

creates Prefix query

Link copied to clipboard
infix fun <T : Any> Metamodel<T>.range(range: Range<out Comparable<T>>?)

creates Range query

Link copied to clipboard
fun Metamodel<*>.regexp(block: RegexpQuery.Builder.() -> Unit = {})

creates Regexp query

Link copied to clipboard
fun <T> shouldAtLeastOneOf(values: Collection<T>?, block: QueryVariantDsl.(T) -> Unit)

Creates a nested BoolQuery inside the current typed occurrence of the BoolQueryDsl

Link copied to clipboard
infix fun DateField<Instant>.term(value: Instant?)
infix fun DateField<LocalDate>.term(value: LocalDate?)
infix fun DateField<Date>.term(value: Date?)
infix fun Metamodel<*>.term(value: FieldValue?)
infix fun <T : Enum<T>> Metamodel<T>.term(value: Enum<T>?)
infix fun Metamodel<Boolean>.term(value: Boolean?)
infix fun Metamodel<Double>.term(value: Double?)
infix fun Metamodel<Float>.term(value: Float?)
infix fun Metamodel<Int>.term(value: Int?)
infix fun Metamodel<Long>.term(value: Long?)
infix fun Metamodel<String>.term(value: String?)
fun DateField<Instant>.term(value: Instant?, block: TermQuery.Builder.() -> Unit = {})
fun DateField<LocalDateTime>.term(value: LocalDateTime?, block: TermQuery.Builder.() -> Unit = {})
fun DateField<LocalDate>.term(value: LocalDate?, block: TermQuery.Builder.() -> Unit = {})
fun DateField<OffsetDateTime>.term(value: OffsetDateTime?, block: TermQuery.Builder.() -> Unit = {})
fun DateField<ZonedDateTime>.term(value: ZonedDateTime?, block: TermQuery.Builder.() -> Unit = {})
fun DateField<Date>.term(value: Date?, block: TermQuery.Builder.() -> Unit = {})
fun Metamodel<*>.term(value: FieldValue?, block: TermQuery.Builder.() -> Unit = {})
fun <T : Enum<T>> Metamodel<T>.term(value: Enum<T>?, block: TermQuery.Builder.() -> Unit = {})
fun Metamodel<Boolean>.term(value: Boolean?, block: TermQuery.Builder.() -> Unit = {})
fun Metamodel<Double>.term(value: Double?, block: TermQuery.Builder.() -> Unit = {})
fun Metamodel<Float>.term(value: Float?, block: TermQuery.Builder.() -> Unit = {})
fun Metamodel<Int>.term(value: Int?, block: TermQuery.Builder.() -> Unit = {})
fun Metamodel<Long>.term(value: Long?, block: TermQuery.Builder.() -> Unit = {})
fun Metamodel<String>.term(value: String?, block: TermQuery.Builder.() -> Unit = {})

creates Term query

Link copied to clipboard
fun DateField<Instant>.terms(vararg terms: Instant)
fun DateField<LocalDate>.terms(vararg terms: LocalDate)
fun DateField<Date>.terms(vararg terms: Date)
infix fun Metamodel<*>.terms(terms: Collection<FieldValue>?)
@JvmName(name = "termsEnum")
infix fun <T : Enum<T>> Metamodel<T>.terms(terms: Collection<T>?)
fun <T : Enum<T>> Metamodel<T>.terms(vararg terms: T)
fun Metamodel<Boolean>.terms(vararg terms: Boolean)
fun Metamodel<Double>.terms(vararg terms: Double)
fun Metamodel<Float>.terms(vararg terms: Float)
fun Metamodel<Int>.terms(vararg terms: Int)
fun Metamodel<Long>.terms(vararg terms: Long)
@JvmName(name = "termsString")
infix fun Metamodel<String>.terms(terms: Collection<String>?)
fun Metamodel<String>.terms(vararg terms: String)
fun DateField<Instant>.terms(vararg terms: Instant, block: TermsQuery.Builder.() -> Unit = {})
fun DateField<LocalDateTime>.terms(vararg terms: LocalDateTime, block: TermsQuery.Builder.() -> Unit = {})
fun DateField<LocalDate>.terms(vararg terms: LocalDate, block: TermsQuery.Builder.() -> Unit = {})
fun DateField<OffsetDateTime>.terms(vararg terms: OffsetDateTime, block: TermsQuery.Builder.() -> Unit = {})
fun DateField<ZonedDateTime>.terms(vararg terms: ZonedDateTime, block: TermsQuery.Builder.() -> Unit = {})
fun DateField<Date>.terms(vararg terms: Date, block: TermsQuery.Builder.() -> Unit = {})
fun Metamodel<*>.terms(terms: Collection<FieldValue>?, block: TermsQuery.Builder.() -> Unit = {})
@JvmName(name = "termsEnumWithBlock")
fun <T : Enum<T>> Metamodel<T>.terms(terms: Collection<T>?, block: TermsQuery.Builder.() -> Unit = {})
fun <T : Enum<T>> Metamodel<T>.terms(vararg terms: T, block: TermsQuery.Builder.() -> Unit = {})
fun Metamodel<Boolean>.terms(vararg terms: Boolean, block: TermsQuery.Builder.() -> Unit = {})
fun Metamodel<Double>.terms(vararg terms: Double, block: TermsQuery.Builder.() -> Unit = {})
fun Metamodel<Int>.terms(vararg terms: Int, block: TermsQuery.Builder.() -> Unit = {})
fun Metamodel<Long>.terms(vararg terms: Long, block: TermsQuery.Builder.() -> Unit = {})
@JvmName(name = "termsStringWithBlock")
fun Metamodel<String>.terms(terms: Collection<String>?, block: TermsQuery.Builder.() -> Unit = {})
fun Metamodel<String>.terms(vararg terms: String, block: TermsQuery.Builder.() -> Unit = {})

creates Terms query

fun Metamodel<Float>.terms(vararg terms: Float, block: TermsQuery.Builder.() -> Unit = {})
Link copied to clipboard
infix fun Metamodel<*>.termsSet(terms: Collection<String>?)
fun Metamodel<*>.termsSet(terms: Collection<String>?, block: TermsSetQuery.Builder.() -> Unit = {})
Link copied to clipboard
operator fun <T : QueryVariant> T.unaryPlus(): T
Link copied to clipboard
infix fun Metamodel<*>.wildCard(value: String?)
fun Metamodel<*>.wildCard(value: String?, block: WildcardQuery.Builder.() -> Unit = {})