多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[[random-scoring]] === Random Scoring You may have been wondering what _consistently random scoring_ is, or why you would ever want to use it.((("consistently random scoring")))((("relevance", "controlling", "random scoring"))) 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((("function_score query", "random_score function")))((("random_score function"))) 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: [source,json] -------------------------------- 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", } } } -------------------------------- <1> The `random_score` clause doesn't have any `filter`, so it will be applied to all documents. <2> 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.