我不確定您是否可以直接通過衰減來實現此目的,但您可以使用script_score
函數輕鬆完成此操作。下面的示例使用動態腳本,但請注意使用file-based scripts是推薦的,更安全的方法。
在下面的查詢中,offset
參數設置爲100,000,並且具有用於其「視圖」字段的值的文檔將得分最高。當視圖的價值從offset
出發時,分數以對數形式衰減。根據您的示例,具有1,000,000和/或10,000的文檔具有相同的分數(此公式中爲0.30279312)。
您可以通過更改腳本的開始以將其乘以_score
而不是除法來顛倒這些結果的順序。
$ curl -XPOST localhost:9200/somestuff/_search -d '{
"size": 100,
"query": {
"bool": {
"must": [
{
"function_score": {
"functions": [
{
"script_score": {
"params": {
"offset": 100000
},
"script": "_score/(1 + ((log(offset) - log(doc['views'].value)).abs()))"
}
}
]
}
}
]
}
}
}'
注意:根據您的數據,您可能需要考慮'views'爲null的可能性。