Elasticsearch:“function_score”与“boost_mode”:“replace”忽略函数分数

2024-02-15

我正在尝试使用 function_score 中定义的不同函数来修改正常查询的分数。

为了找出我的函数计算出的分数是什么,我将“boost_mode”指定为“replace”。然而,这使得所有分数保持不变:全部等于 1。

考虑以下查询:

{
  "query": {
    "function_score": {
      "query": {
        "terms": {
          "name": ["men", "women"]
        }
      },
      "score_mode": "avg",
      "functions": [
        {
          "filter": {
            "terms": {
              "name": ["men","man"]
            }
          },
          "weight": 2
        }
      ],
      "boost_mode": "replace"
    }
  },
  "explain": true,
  "from": 0
}

我期望在这里得到不同的分数,具体取决于“name”字段是否包含“men”或“man”。此类文档肯定存在于索引中。

此外,如果我指定 "explain": true,我得到的解释中显示的分数与命中的 _score 字段中显示的分数不同:

{  
    "_shard":0,
    "_node":"ro26nlDuTfiTaIlIgHqg4g",
    "_index":"products10",
    "_type":"product_basic",
    "_id":"0c25fc90433481aac0cce62dd1a21e06",
    "_score":1,
    "_source":{  
        "category":[  
            "Chicago Blues",
            "Blues",
            "Styles",
            "Digital Music"
        ],
        "site_name":"www.amazon.com",
        "name":"Who's That Women?",
        "url":"http://www.amazon.com/dp/B001125F8I/",
        "price":0.99,
        "reviews":[  

        ],
        "breadcrumb":"Digital Music",
        "in_stock":true,
        "features":[  

        ],
        "pic_urls":[  
            "http://ecx.images-amazon.com/images/I/51CvgPMwtsL.jpg",
            "http://ecx.images-amazon.com/images/I/51CvgPMwtsL.jpg"
        ],
        "name_semantic_core":[  
            "Women ?",
            "?"
        ],
        "category_path":"/Chicago Blues/Blues/Styles/",
        "visit_datetime":"2014-11-04T11:50:34.169779",
        "detected_category":"Digital Music"
    },
    "_explanation":{  
        "value":1.2249949,
        "description":"function score, no filter match, product of:",
        "details":[  
            {  
                "value":1.2249949,
                "description":"product of:",
                "details":[  
                    {  
                        "value":2.4499898,
                        "description":"sum of:",
                        "details":[  
                            {  
                                "value":2.4499898,
                                "description":"weight(name:women in 6181332) [PerFieldSimilarity], result of:",
                                "details":[  
                                    {  
                                        "value":2.4499898,
                                        "description":"score(doc=6181332,freq=1.0), product of:",
                                        "details":[  
                                            {  
                                                "value":0.67790973,
                                                "description":"queryWeight, product of:",
                                                "details":[  
                                                    {  
                                                        "value":7.228071,
                                                        "description":"idf(docFreq=238699, maxDocs=120967660)"
                                                    },
                                                    {  
                                                        "value":0.09378847,
                                                        "description":"queryNorm"
                                                    }
                                                ]
                                            },
                                            {  
                                                "value":3.6140356,
                                                "description":"fieldWeight in 6181332, product of:",
                                                "details":[  
                                                    {  
                                                        "value":1,
                                                        "description":"tf(freq=1.0), with freq of:",
                                                        "details":[  
                                                            {  
                                                                "value":1,
                                                                "description":"termFreq=1.0"
                                                            }
                                                        ]
                                                    },
                                                    {  
                                                        "value":7.228071,
                                                        "description":"idf(docFreq=238699, maxDocs=120967660)"
                                                    },
                                                    {  
                                                        "value":0.5,
                                                        "description":"fieldNorm(doc=6181332)"
                                                    }
                                                ]
                                            }
                                        ]
                                    }
                                ]
                            }
                        ]
                    },
                    {  
                        "value":0.5,
                        "description":"coord(1/2)"
                    }
                ]
            },
            {  
                "value":1,
                "description":"queryBoost"
            }
        ]
    }
}

这里的解释显示“value”:1.2249949,而“_score”为1。

我究竟做错了什么?如何获得使用 functinon_score 函数计算的实际分数 [在与原始查询分数结合之前]?

Update: Here's what I get if matching product is found. For some reason, score is 1 while it should be 2: explanation for a matching product


在您的示例中,该函数与任何文档都不匹配:function score, no filter match,。另外,从文档 https://www.elastic.co/guide/en/elasticsearch/reference/1.7/query-dsl-function-score-query.html当使用替换时,会发生以下情况:only function score is used, the query score is ignored。所以,情况是这样的:过滤器不匹配 - 因此不计算评分 - 并且replace将使查询分数被忽略并使用过滤器中的分数(该分数不存在,因为它不匹配)。

当函数不匹配时,函数的默认值为1。你可以检查一下"boost_mode": "sum"。我的观点是,这就是您看到分数的原因1.

关于avg行为,这对我来说看起来不太好,而且很可能是一个错误。我在这里报告了:https://github.com/elastic/elasticsearch/issues/13732 https://github.com/elastic/elasticsearch/issues/13732

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Elasticsearch:“function_score”与“boost_mode”:“replace”忽略函数分数 的相关文章

随机推荐

  • 在java中将美元(大十进制)转换为美分(整数)的最佳方法是什么?

    我必须将我的网络应用程序与支付网关集成 我想输入美元总金额 然后将其转换为美分 因为我的支付网关库接受美分金额 类型Integer 我找到Big Decimal在java中是操纵货币的最佳方式 目前我输入的金额为 50 美元 并将其转换为I
  • SQL Server 和 Java 之间的时间戳差异

    我需要将一个简单的过程从 Java 代码复制到 SQL Server 存储过程 它将进入生产中的 SQL Azure 数据库 但我正在针对本地 SQL Express 12 安装对其进行测试 该存储过程的一部分是将一些值连接成一个字符串 这
  • SSIS 和 MySQL - 表名分隔符问题

    我正在尝试使用 SQL Server 2008 SSIS 将行从 Access 数据库插入 MySQL 数据库 TITLE Microsoft SQL Server Management Studio ERROR 42000 MySQL O
  • 删除重复的文件扩展名

    我有数千个名为 filename gz gz gz gz gz gz gz gz gz gz gz 的文件 我正在使用这样的 find 命令find name gz 找到这些文件并使用 exec或者通过管道连接到 xargs 并使用一些神奇
  • 无法访问 sencha 中整个控制器的全局变量

    我一直在尝试访问一个控制器内的全局值 但无法访问它 我一直在关注这个如何在sencha中定义全局变量 https stackoverflow com questions 18095037 how to define global varia
  • C3.js将折线图Y轴的标签位置更改为Y轴居中

    我需要更改 Y 轴标签在 Y 轴上的位置 当前的六个位置选项无法满足我的场景 我也尝试使用 d3 进行自定义 但仍然没有成功 我创建了一个plnkr http plnkr co edit WzXVForyGJP01WJlAXj5 p pre
  • 由于随机效应,lme 发出警告消息

    我有一个包含 5 个变量的数据框 批次 晶圆 序列号 电压 放大倍数 在此数据框中 有 1020 个按 Serial number 分组的子集 每个子集都有一定数量的测量数据点 电压放大 我将数据与 summary fit2 lme lt
  • 是否可以创建 DbContext 接口或抽象类并使用它来注入不同的 DbContext 对象?

    我有一个软件产品 数据库是在 SQLServer 上创建的 表和列名称是由开发团队定义的 然后使用数据库优先方法将模型导入到 Visual Studio 现在我们正在为其他公司开发相同类型的解决方案使用 ORACLE 并请求表和列的命名约定
  • MongoDB:对数据库的读/写是否并发?

    当百万个线程尝试执行时会发生什么read from and write to MongoDB同时 锁定是否发生在db level table level or row level 它发生在数据库级别 但是在 Mongo 2 0 中 有一些并
  • matplotlib 等高线图:对数刻度中的比例颜色条级别

    是否可以将颜色条的级别设置为对数比例 如下图所示 这是一些可以实现的示例代码 import matplotlib pyplot as plt import numpy as np from matplotlib colors import
  • 解决WinForms中的跨线程异常

    目前我正在使用 WinForms C 语言 并且必须在后台运行该应用程序 为此 我使用异步 当我运行该应用程序时 它显示一个异常 例如 跨线程操作无效 从创建它的线程以外的线程访问控制 我该如何解决这个错误 当对控件进行方法调用时 如果调用
  • 哪里可以获取其他 iOS 版本的 iOS 系统符号

    请注意 我要求提供一个可以下载这些符号的地方 或者要求一个明确的答案 此类网站被 Apple 禁止 重复 问题与我在问题中链接的问题类似 唯一建议的答案是访问物理设备或找到另一位拥有物理设备的开发人员 我已经符号化了故障转储 但只有我的应用
  • PHP 字符串转数组

    我有一个字符串 当我 var dump 返回以下内容时 string 20 key1 key1 value key2 key2 value 如何将其转换为一个数组 在 var dump 时返回以下内容 array 2 key1 gt str
  • MVC 5 阻止通过 Iframe 访问内容

    自从从 MVC4 升级到 MVC5 以来 我注意到我的网页中添加了一个额外的服务器标头 X 框架选项 SAMEORIGIN 我了解添加此标签的安全优势 但其中一个页面应该包含在其他项目 在其他域上 的 iframe 中 这个额外的标头会阻止
  • 将 git hook 添加到谷歌云存储库

    谷歌云附带的功能之一是git 仓库 https cloud google com source repositories docs 是否可以向此存储库添加挂钩 我想要收到推送 但我不知道如何访问 git hooks 如果您将代码托管在git
  • 假互联网差

    我正在尝试在网络状况不佳的情况下测试我的 iPhone 和 Android 应用程序 我记得不久前我读到过一个程序 它可以伪造不同类型的不良互联网 有谁记得这个程序叫什么或者是否有类似的东西我可以用来完成这个任务 对于 iOS 正如其他人所
  • 如何将自定义 HTML 内容添加到 FastAPI Swagger UI 文档?

    我需要在 FastAPI 应用程序的 Swagger UI 中添加一个自定义按钮 我发现这个答案 https stackoverflow com questions 74661044 add a custom javascript to t
  • 如何根据条件在 Pandas 中构建新列(新列应输出字符串)

    我正在尝试使用条件在 pandas 中创建一个列来创建定性观察 例如 如果数据框如下所示 Distance 1 1 2 5 3 40 4 15 我想创建一个新列 我们称之为df length 这是对距离的观察 例如 if df Distan
  • Hibernate Annotations - 如何从映射中排除 bean 字段?

    我有一个包含一些字段的 bean 其中两个字段不打算由 hibernate 映射 errorStatus 和 operationResultMessage 我如何告诉 Hibernate 通过注释 我不想映射这些字段 bean中的映射表没有
  • Elasticsearch:“function_score”与“boost_mode”:“replace”忽略函数分数

    我正在尝试使用 function score 中定义的不同函数来修改正常查询的分数 为了找出我的函数计算出的分数是什么 我将 boost mode 指定为 replace 然而 这使得所有分数保持不变 全部等于 1 考虑以下查询 query