OpenSearch/docs/reference/query-dsl/dis-max-query.asciidoc

66 lines
2.1 KiB
Plaintext

[[query-dsl-dis-max-query]]
=== Disjunction max query
++++
<titleabbrev>Disjunction max</titleabbrev>
++++
Returns documents matching one or more wrapped queries, called query clauses or
clauses.
If a returned document matches multiple query clauses, the `dis_max` query
assigns the document the highest relevance score from any matching clause, plus
a tie breaking increment for any additional matching subqueries.
You can use the `dis_max` to search for a term in fields mapped with different
<<mapping-boost,boost>> factors.
[[query-dsl-dis-max-query-ex-request]]
==== Example request
[source,console]
----
GET /_search
{
"query": {
"dis_max": {
"queries": [
{ "term": { "title": "Quick pets" } },
{ "term": { "body": "Quick pets" } }
],
"tie_breaker": 0.7
}
}
}
----
[[query-dsl-dis-max-query-top-level-params]]
==== Top-level parameters for `dis_max`
`queries`::
(Required, array of query objects) Contains one or more query clauses. Returned
documents **must match one or more** of these queries. If a document matches
multiple queries, {es} uses the highest <<query-filter-context, relevance
score>>.
`tie_breaker`::
+
--
(Optional, float) Floating point number between `0` and `1.0` used to increase
the <<relevance-scores,relevance scores>> of documents matching multiple
query clauses. Defaults to `0.0`.
You can use the `tie_breaker` value to assign higher relevance scores to
documents that contain the same term in multiple fields than documents that
contain this term in only the best of those multiple fields, without confusing
this with the better case of two different terms in the multiple fields.
If a document matches multiple clauses, the `dis_max` query calculates the
relevance score for the document as follows:
. Take the relevance score from a matching clause with the highest score.
. Multiply the score from any other matching clauses by the `tie_breaker` value.
. Add the highest score to the multiplied scores.
If the `tie_breaker` value is greater than `0.0`, all matching clauses count,
but the clause with the highest score counts most.
--