70 lines
2.2 KiB
Plaintext
70 lines
2.2 KiB
Plaintext
|
[[search-request-rescore]]
|
||
|
=== Rescoring
|
||
|
|
||
|
Rescoring can help to improve precision by reordering just the top (eg
|
||
|
100 - 500) documents returned by the
|
||
|
<<search-request-query,`query`>> and
|
||
|
<<search-request-filter,`filter`>> phases, using a
|
||
|
secondary (usually more costly) algorithm, instead of applying the
|
||
|
costly algorithm to all documents in the index.
|
||
|
|
||
|
A `rescore` request is executed on each shard before it returns its
|
||
|
results to be sorted by the node handling the overall search request.
|
||
|
|
||
|
Currently the rescore API has only one implementation: the query
|
||
|
rescorer, which uses a query to tweak the scoring. In the future,
|
||
|
alternative rescorers may be made available, for example, a pair-wise rescorer.
|
||
|
|
||
|
*Note:* the `rescore` phase is not executed when
|
||
|
<<search-request-search-type,`search_type`>> is set
|
||
|
to `scan` or `count`.
|
||
|
|
||
|
==== Query rescorer
|
||
|
|
||
|
The query rescorer executes a second query only on the Top-K results
|
||
|
returned by the <<search-request-query,`query`>> and
|
||
|
<<search-request-filter,`filter`>> phases. The
|
||
|
number of docs which will be examined on each shard can be controlled by
|
||
|
the `window_size` parameter, which defaults to
|
||
|
<<search-request-from-size,`from` and `size`>>.
|
||
|
|
||
|
The scores from the original query and the rescore query are combined
|
||
|
linearly to produce the final `_score` for each document. The relative
|
||
|
importance of the original query and of the rescore query can be
|
||
|
controlled with the `query_weight` and `rescore_query_weight`
|
||
|
respectively. Both default to `1`.
|
||
|
|
||
|
For example:
|
||
|
|
||
|
[source,js]
|
||
|
--------------------------------------------------
|
||
|
curl -s -XPOST 'localhost:9200/_search' -d '{
|
||
|
"query" : {
|
||
|
"match" : {
|
||
|
"field1" : {
|
||
|
"operator" : "OR",
|
||
|
"query" : "the quick brown",
|
||
|
"type" : "boolean"
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
"rescore" : {
|
||
|
"window_size" : 50,
|
||
|
"query" : {
|
||
|
"rescore_query" : {
|
||
|
"match" : {
|
||
|
"field1" : {
|
||
|
"query" : "the quick brown",
|
||
|
"type" : "phrase",
|
||
|
"slop" : 2
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
"query_weight" : 0.7,
|
||
|
"rescore_query_weight" : 1.2
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
'
|
||
|
--------------------------------------------------
|