我想以不同方式对function_score中的每个函数进行加权。我有一个常规的文本查询与基于日期的衰减和地理查询混合在一起。我想减少基于日期衰减的权重。在一些旧的文档中,我看到了function_score的scale_weight
选项,但我再也看不到它了。这是我的疑问:
"query": {
"function_score": {
"query": {
"query_string": {
"query": "my query",
"default_operator": "OR"
}
},
"functions": [
{
"script_score": {
"script": "_score * doc[\"rgScore\"].value"
}
},
{
"gauss": {
"location": {
"origin": {
"lat": 49.4928119,
"lon": -117.2948343
},
"scale": "100km",
"offset": "10km",
"decay": 0.5
}
}
},
{
"exp": {
"start": {
"origin": "2014-06-20",
"scale": "90d",
"offset": "0d",
"decay": 0.01
}
}
}
],
"filter": {
"range": {
"start": {
"gte": "2014-06-20"
}
}
}
}
},
答案 0 :(得分:4)
function score query的文档介绍了如何执行此操作,您还可以查看this tutorial。
总之,您可以为每个函数添加权重(对于1.4.0.Beta1之后的版本)或boost_factor(对于之前的版本)属性,并且它将适当地修改每个子句的贡献。
对于您的情况,例如:
{
"exp": {
"start": {
"origin": "2014-06-20",
"scale": "90d",
"offset": "0d",
"decay": 0.01
}
},
"weight" : 0.2
}
应该有效 - 如果您的版本在1.4.0.Beta1之前,请尝试将“weight”替换为“boost_factor”。
权重始终相对于其他函数子句,因此您可能还需要调整它们以获得所需的结果。