似乎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_ts
与unixtimestamp
)
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
]
}
}
_score
应1416398851930
(值)舍入为1416398900000
。
这是一种正常行为,是否记录在某处(我已经搜索过)?并且有一种方法可以强制弹性搜索不要对分数进行舍入。
elasticsearch的版本是1.3.2(ubuntu 14.04)。
答案 0 :(得分:1)
_score
值在内部硬编码为浮点数,只能精确表示值为134217728的整数。因此,如果要在评分函数中使用存储为数字的字段大于它,它将溢出缓冲区并被截断。见this github issue