我有一个带有较少_score的文档,当我给出size:100时,在查询时没有检索到该文档。我需要在前25个结果中提供该文档。怎么做到这一点?有没有选择手动增加_score?
答案 0 :(得分:1)
我将描述一种可行的方法来实现这一技巧
您可以使用 function_score 根据某些功能提升分数:
function_score查询提供了几种类型的得分函数。
script_score
重量
random_score
field_value_factor
衰减函数:高斯,线性,exp
示例,将使用 field_value_factor 通过乘以得分来提高分数:
{
"query": {
"function_score": {
"query": {
"match_all": {}
},
"script_score": {
"script": "_score * doc['popularity'].value"
},
"boost_mode": "multiply"
}
}
}
要启用此动态评分,您需要根据Elastic的版本更改yml配置文件:
它要么(至少它是2.4的方式)
script.inline: true
script.indexed: true
或类似的东西:
script.disable_dynamic: false
有关动态脚本的更多信息 - https://www.elastic.co/guide/en/elasticsearch/reference/2.4/modules-scripting.html#enable-dynamic-scripting(您可以选择正在使用的Elastic版本)
有关功能评分和功能类型的更多信息: https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html