我有一个带有两个衰减函数的查询(ES 2.4.4),我使用"score_mode" : "sum"
来对查询项中的衰减函数得分+得分求和。对于测试,我使用"boost_mode" : "replace"
来阻止任何其他分数(来自查询)影响我的分数(我想测试衰减函数)。
这些是我的衰变功能:
"function_score": {
"boost_mode" : "replace",
"score_mode" : "sum",
"functions": [
{
"gauss": {
"date": {
"scale": "10d",
"offset": "15d",
"decay": 0.9
}
}, "weight" : 400
},
{
"gauss": {
"priority": {
"origin": "5000",
"scale": "2000",
"decay": 0.9
}
}, "weight" : 20
}
]
我的结果包括2篇不同日期(2017-08-28,2009-05-08)的文章,具有相同的优先级(1000)和相同的分数! (13.122)
怎么会这样?为什么2017-08-28
得分不高?
所以我试着解释一下这个问题。
2017-08-28:
`"value": 13.122,
"description": "function score, score mode [sum]",
"details": [
{
"value": 7.897688e-31,
"description": "function score, product of:",
"details": [
{
"value": 1,
"description": "match filter: *:*",
"details": [
]
},
{ }
]
},
{
"value": 13.122,
"description": "function score, product of:",
"details": [
{
"value": 1,
"description": "match filter: *:*",
"details": [
]
},
{
"value": 13.122,
"description": "product of:",
"details": [`
我不明白为什么得分是13.122而不是13.122 + 7.897。 "score_mode" : "sum"
是否有错误或者有什么我不明白的? 2009-05-08的另一篇文章的优先级为13.122,日期为0。
注意:我必须使用"score_mode" : "sum"
,因为我想从每种类型获得前10名结果,而对于我的某些类型,日期不相关所以我使用分数为0的旧日期,当得分模式设置乘以(弹性默认分数模式),由于乘法,此类型的所有分数都返回为0。
答案 0 :(得分:0)
该值不是7.897 - 它是7.897688e-31。所以你的总分是他们的总和,这是
$data = explode("," ,$_POST["menu"]);
$subdata = explode("," ,$_POST["submenu"]);
foreach ($data AS $key => $menu){
if(){ // This Menu has subarray
}
即13.122。 :)