elasticsearch - score_mode sum不会返回预期的resutls

时间:2018-06-06 09:45:31

标签: elasticsearch

我有一个带有两个衰减函数的查询(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。

1 个答案:

答案 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。 :)