【问题标题】:Is it possible to discard results with higher score than a given threshold in ElasticSearch?是否可以丢弃分数高于 ElasticSearch 中给定阈值的结果?
【发布时间】:2020-01-10 19:50:21
【问题描述】:

min_score参数一样,可以丢弃分数小的结果,有没有办法丢弃分数高于给定值的结果?

我使用商品价格来计算分数,但我需要进行查询以确保价格在某些限制(最大值和最小值)之间。价格是使用 function_score 字段函数对几个字段求和来计算的。

干杯。

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    我的第一个想法是使用带有范围查询的 post_filter,但 _score is not available in the post_filter

    但与此同时,作为一种解决方法,只需定义一个 script_score 以排除更高的分数:

    GET _search
    {
      "query": {
        "function_score": {
          "query": {
            ...
          },
          "script_score" : {
            "script" : {
              "params": {
                "max_score": 10
               },
               "source": "_score > params.max_score ? 0 : _score"
             }
          },
          "boost_mode": "replace"
        }
      }
    }
    

    【讨论】:

    • 谢谢@ibexit。这正是我试图阻止的,因为脚本速度较慢,但​​似乎没有更好的解决方案。
    • 当您基于多个字段的价格计算 _score 时,您是否能够在使用摄取管道进行索引时预先计算 _score?如果是这样,您将在文档中有一个字段,并且您的搜索速度会更快,并且范围过滤器查询也将起作用 - 如果速度很重要,请查看它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-07
    • 1970-01-01
    • 2017-11-17
    • 2019-03-30
    • 2017-04-24
    • 2021-12-11
    • 2015-09-22
    相关资源
    最近更新 更多