脚本评分
https://www.elastic.co/guide/cn/elasticsearch/guide/current/script-score.html
es操作
POST index/_search
{
"query": {
"function_score": {
"query": {
"match": {
"content": "测试"
}
},
"script_score": {
"script": "double oneDay = 24*60*60*1000;double diff = (System.currentTimeMillis() - doc['create_time'].value.getMillis())/oneDay + 1;return 10.0/diff;"
},
"boost_mode": "sum"
}
}
}
es对应java代码
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("content", content);
boolQueryBuilder.must(matchQueryBuilder);
String inlineScript = "double oneDay = 24*60*60*1000;double diff = (System.currentTimeMillis() - doc['create_time'].value.getMillis())/oneDay + 1;return 10.0/diff;";
Script script = new Script(ScriptType.INLINE,"painless",inlineScript ,new HashMap<>());
ScriptScoreFunctionBuilder scriptScoreFunctionBuilder = ScoreFunctionBuilders.scriptFunction(script);
FunctionScoreQueryBuilder functionScoreQueryBuilder = new FunctionScoreQueryBuilder(boolQueryBuilder,scriptScoreFunctionBuilder);
// 搜索排序
searchSourceBuilder.query(functionScoreQueryBuilder);
SearchResponse response = EsBuild.createClient().handle(searchSourceBuilder);