You may have been wondering what consistently random scoring is, or why
you would ever want to use it. The previous example provides a good use case.
All results from the previous example would receive a final _score
of 1, 2,
3, 4, or 5. Maybe there are only a few homes that score 5, but presumably
there would be a lot of homes scoring 2 or 3.
As the owner of the website, you want to give your advertisers as much
exposure as possible. With the current query, results with the same _score
would be returned in the same order every time. It would be good to introduce
some randomness here, to ensure that all documents in a single score level
get a similar amount of exposure.
We want every user to see a different random order, but we want the same user to see the same order when clicking on page 2, 3, and so forth. This is what is meant by consistently random.
The random_score
function, which outputs a number between 0 and 1, will
produce consistently random results when it is provided with the same seed
value, such as a user’s session ID:
GET /_search
{
"query": {
"function_score": {
"filter": {
"term": { "city": "Barcelona" }
},
"functions": [
{
"filter": { "term": { "features": "wifi" }},
"weight": 1
},
{
"filter": { "term": { "features": "garden" }},
"weight": 1
},
{
"filter": { "term": { "features": "pool" }},
"weight": 2
},
{
"random_score": { (1)
"seed": "the users session id" (2)
}
}
],
"score_mode": "sum"
}
}
}
The random_score
clause doesn’t have any filter
, so it will
be applied to all documents.
Pass the user’s session ID as the seed
, to make randomization
consistent for that user. The same seed
will result in the
same randomization.
Of course, if you index new documents that match the query, the order of results will change regardless of whether you use consistent randomization or not.
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。