Elasticsearch中的自定义评分功能不会返回预期的字段值

时间:2016-06-13 21:47:07

标签: elasticsearch

我为我的文档创建了一个自定义评分函数,它只返回每个文档的字段function addDays(d, n) { var date = new Date(d); date.setHours(24 * n); return date; } 的值。但由于某些原因,在下面的示例中,结果中a的最后一位数字与每个文档的_score值的最后一位数字不同。这里发生了什么?

a

这将返回以下内容:

PUT test/doc/1
{
  "a": 851459198
}

PUT test/doc/2
{
  "a": 984968088
}

GET test/_search
{
  "query": {
    "function_score": {
      "script_score": {
        "script": {
          "inline": "doc[\"a\"].value"
        }
      }
    }
  }
}

为什么{ "took": 16, "timed_out": false, "_shards": { "total": 5, "successful": 5, "failed": 0 }, "hits": { "total": 2, "max_score": 984968060, "hits": [ { "_index": "test", "_type": "doc", "_id": "2", "_score": 984968060, "_source": { "a": 984968088 } }, { "_index": "test", "_type": "doc", "_id": "1", "_score": 851459200, "_source": { "a": 851459198 } } ] } } 与字段_score的值不同?

我正在使用Elasticsearch 2.1.1

1 个答案:

答案 0 :(得分:0)

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