当前位置: 首页 > 知识库问答 >
问题:

elasticsearch - score_mode sum不返回预期结果

柴坚诚
2023-03-14

我有一个带有两个衰减函数(ES 2.4.4)的查询,我使用“score_mode”:“sum”对查询项中的衰减函数得分求和。对于测试,我使用“boost_mode”:“replace”来防止任何其他分数(来自查询)影响我的分数(我想测试衰减函数)。

这些是我的衰减函数:

"function_score":{"boost_mode":"替换","score_mode":"总和","函数": [ { "高斯":{"日期":{"比例尺":"10d","偏移":"15d","衰减":0.9 } }, "重量":400 }, { "高斯":{"优先级":{"原点":"5000","比例尺":"2000","衰减":0.9 } }, "重量":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"有bug还是有什么我不明白的地方?另一篇文章从2009-05-08的优先级评分13.122,日期评分0。

注意:我必须使用< code>"score_mode" : "sum",因为我想从每种类型中获得前10个结果,并且对于我的一些类型,日期是不相关的,所以我使用分数为0的旧日期,当分数模式设置为乘法(弹性默认分数模式)时,由于乘法,我对此类型的所有分数都返回0。

共有1个答案

池俊茂
2023-03-14

该值不是 7.897,而是 7.897688e-31。所以你的总分是他们的总和,这是

13.1220000000000000000000000000000007897688

即13.122。:)

 类似资料:
  • 我想mock接受对象参数的方法。此对象参数是从动态创建的。不会返回预期的结果,尽管这两个对象具有相同的数据,但只是不同的哈希代码。 有没有什么方法来模拟方法,使它能够以预期的结果响应?

  • 问题内容: 在对包含多个单词的字符串字段进行排序时,Elasticsearch会拆分字符串值,并使用min或max作为排序值。IE:按升序对值为“老虎眼”的字段进行排序时,排序值为:“眼”,而按降序进行排序时,值为:“老虎”。 假设我在索引中输入了“老虎之眼”和“死亡之轮”,当我对该字段进行升序排序时,我希望“老虎之眼”是第一个,因为“ E”在“ W”之前,但我在该字段上进行排序时看到的是“死亡轮

  • 试图找出这个微不足道的例子的分数。我希望得到brenda eaton的文件,但我得到的是brenda fassie的最佳结果。

  • 因为当我在查询中使用(From/Size)函数时,它不会返回我希望返回的文档。例如,我在elasticsearch中有5个文档,序列中的所有文档,_id1,_id2,_id3,_id4,id 5。 文档ID 5有单词(汽车),在查询中,我说要从ID 4中获取单词(汽车)(“来自”: 4,“大小”: 1,)它不返回ID 5,它有单词(汽车),但在查询中我把存在于doc 5中的信息,所以我应该带doc

  • 我有以下命名查询; 当我执行代码时; 我没有得到Person类型的resultList,即使我已经明确指定了命名查询的参数。相反,我得到的类型是包含对象数组的向量。 如何使查询显式返回“Person”类型?

  • 问题内容: 我正在使用Newtonsoft的Json.Net从以下json中选择节点: 以下C#代码段 产量: 现在,这很酷,我想做的是按客户端代码过滤,我认为 可以,但是我显然对语法不够了解。这将返回一个空列表: 并且单个令牌选择器返回null: 我在https://jsonpath.curiousconcept.com/上尝试了几种不同的配置,看来我的查询语法确实坏了。 使用Flow Comm