function_score得分是四舍五入的

时间:2014-11-20 13:54:49

标签: elasticsearch scoring

似乎elasticsearch正在舍入来自function_score的分数。 我有一个复杂的查询,使用function_score和has_child根据子的creation_date日期对父进行排序(因此我不能使用sort)。即使在非常简单的情况下,回报分数也会四舍五入:

{
  "query": {
    "function_score": {
      "boost_mode": "replace",
      "functions": [
        {
          "script_score": {
            "script": "doc[\"creation_date\"].value"
          }
        }
      ]
    }
  },
  "script_fields": {
    "date": {
      "script": "doc['creation_date'].date"
    },
    "value": {
      "script": "doc['creation_date'].value"
    }
  }
}

我尝试了不同的script_score:

doc["creation_date"].date.getMillis()

或(creation_date_tsunixtimestamp

的日期相同
doc["creation_date_ts"].value

甚至是文字int:

1416398851930

但无论我使用什么,我最终得分都很高。

以下是结果示例:

{
   "_id": "nyrhhh5z",
   "_index": "xxx-1416487038",
   "_score": 1416398900000,
   "_type": "xxx",
   "fields": {
      "date": [
         "2014-11-19T12:07:31.930Z"
      ],
      "value": [
         1416398851930
      ]
   }
}

_score1416398851930(值)舍入为1416398900000。 这是一种正常行为,是否记录在某处(我已经搜索过)?并且有一种方法可以强制弹性搜索不要对分数进行舍入。

elasticsearch的版本是1.3.2(ubuntu 14.04)。

1 个答案:

答案 0 :(得分:1)

_score值在内部硬编码为浮点数,只能精确表示值为134217728的整数。因此,如果要在评分函数中使用存储为数字的字段大于它,它将溢出缓冲区并被截断。见this github issue