在弹性搜索中加权function_score函数

时间:2014-06-20 22:39:13

标签: elasticsearch

我想以不同方式对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" } } } } },

1 个答案:

答案 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”。

权重始终相对于其他函数子句,因此您可能还需要调整它们以获得所需的结果。