关于建设网站的申请报告,深圳网站建设优化,额尔古纳网站建设,移动网站开发公司原因分析
Elasticsearch默认的打分#xff0c;一般是不会出现异常的之所以会出现NAN异常#xff0c;往往是因为我们重新计算了打分#xff0c;使用了function_score核心原因是在function_score中#xff0c;出现了计算异常#xff0c;比如 0/0,比如log1p(x),x为负数等
真…原因分析
Elasticsearch默认的打分一般是不会出现异常的之所以会出现NAN异常往往是因为我们重新计算了打分使用了function_score核心原因是在function_score中出现了计算异常比如 0/0,比如log1p(x),x为负数等
真实案例分析
测试索引
PUT tx
POST tx/_mapping
{properties : {age : {type : long},time : {type : date,format : yyyy-MM-dd},title : {type : text,analyzer : ik_smart}}
}
POST tx/_doc/19
{title:中古,time : 1969-10-12,age:12
}搜索query示例
POST /tx/_search
{query: {function_score: {query: {match_all: {}},field_value_factor: {field: time,modifier: log1p}}}
}
- 其实modifier.log1p和如下搜索是完全一样的
POST /tx/_search
{query: {function_score: {query: {match_all: {}},script_score: {script: _score * Math.log1p(1doc[time].value.toInstant().toEpochMilli())}}}
}搜索异常返回值
{error : {root_cause : [{type : exception,reason : function score query returned an invalid score: NaN for doc: 0}],type : search_phase_execution_exception,reason : all shards failed,phase : query,grouped : true,failed_shards : [{shard : 0,index : tx,node : aPOBCVYkRA-a0R9FR4eDzQ,reason : {type : exception,reason : function score query returned an invalid score: NaN for doc: 0}}]},status : 500
}搜索异常原因分析
搜索使用了function_score重新打分并且使用了log1p函数但是由于数据中的时间是1969-10-12但是es计算时间是从1970年计算开始这个值换算成毫秒就是负数导致log1p异常所以最终得分异常出现是NAN