我们能否在Elasticsearch中取得好成绩

时间:2017-04-24 12:48:10

标签: elasticsearch elasticsearch-plugin

我正在实施一个项目,其中结果将根据得分进行排序,如果得分相同,则结果集将根据日期字段进行排序。 当分数相差.00001,即第5或第6个小数位时,就会出现问题。有没有什么方法可以将Elasticsearch中得出的分数四舍五入到第4位小数,这样二级排序就可以对它起作用。 如果不是可以实现的任何解决方法。

由于 Ashit

2 个答案:

答案 0 :(得分:2)

这是一个可行的解决方案,使用script score来舍入实际分数

GET /post/_search
{
    "query": {
        "function_score": {
            "query": {
                "match": {"title": "example"}
            },
            "script_score" : {
                "script" : {
                  "source": "Math.round(_score)"
                }
            }
        }
    },
    "sort": [
        "_score",
        {"postdate": "desc"}
    ]
}

在此搜索示例中,我们首先对舍入的_score进行排序,然后对post.postdate进行降序排序。

答案 1 :(得分:0)

我遇到了同样的问题,我想将分数四舍五入,首先按分数排序,然后按其他顺序排序。 我也使用了 Mad 的答案,带有 function_score,但在昏迷后我仍然有分数。

根据documentation,我修改了boost_mode以获得一个整数:

GET /_search
{
  "query": {
    "function_score": {
      "query": { "match_all": {} },
      "boost_mode": "replace",
      "script_score" : {
        "script" : {
          "source": "Math.round(_score)"
          }
        }
     }
   },
  "sort": [
    "_score",
    {"postdate": "desc"}
   ]
 }

使用这个 boost_mode 帮助我得到整数作为分数。