What would happen if the user had searched instead for `quick pets''? Both
documents contain the word `quick
, but only document 2 contains the word
pets
. Neither document contains both words in the same field.
A simple dis_max
query like the following would choose the single best
matching field, and ignore the other:
{
"query": {
"dis_max": {
"queries": [
{ "match": { "title": "Quick pets" }},
{ "match": { "body": "Quick pets" }}
]
}
}
}
{
"hits": [
{
"_id": "1",
"_score": 0.12713557, (1)
"_source": {
"title": "Quick brown rabbits",
"body": "Brown rabbits are commonly seen."
}
},
{
"_id": "2",
"_score": 0.12713557, (1)
"_source": {
"title": "Keeping pets healthy",
"body": "My quick brown fox eats rabbits on a regular basis."
}
}
]
}
Note that the scores are exactly the same.
We would probably expect documents that match on both the title
field and
the body
field to rank higher than documents that match on just one field,
but this isn’t the case. Remember: the dis_max
query simply uses the
score
from the _single best-matching clause.
It is possible, however, to also take the _score
from the other matching
clauses into account, by specifying the tie_breaker
parameter:
{
"query": {
"dis_max": {
"queries": [
{ "match": { "title": "Quick pets" }},
{ "match": { "body": "Quick pets" }}
],
"tie_breaker": 0.3
}
}
}
This gives us the following results:
{
"hits": [
{
"_id": "2",
"_score": 0.14757764, (1)
"_source": {
"title": "Keeping pets healthy",
"body": "My quick brown fox eats rabbits on a regular basis."
}
},
{
"_id": "1",
"_score": 0.124275915, (1)
"_source": {
"title": "Quick brown rabbits",
"body": "Brown rabbits are commonly seen."
}
}
]
}
Document 2 now has a small lead over document 1.
The tie_breaker
parameter makes the dis_max
query behave more like a
halfway house between dis_max
and bool
. It changes the score calculation
as follows:
Take the _score
of the best-matching clause.
Multiply the score of each of the other matching clauses by the tie_breaker
.
Add them all together and normalize.
With the tie_breaker
, all matching clauses count, but the best-matching
clause counts most.
Note
|
The |
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。