tf / idf在场内提升

时间:2015-07-02 15:01:47

标签: elasticsearch lucene tf-idf

我的用例是这样的: 对于查询iphone charger,我得到的结果与nameiphone charger coupons比名称iphone charger更高,可能是因为description和其他领域。除非我大幅度地歪曲重要性,否则提升name字段并没有多大帮助。我真正需要的是tf/idf字段内的name提升

引用elasticsearch blog

  

字段中术语的频率被字段的长度偏移。但是,实用的评分功能以相同的方式处理所有字段。它会将所有标题字段(因为它们很短)视为比所有正文字段更重要(因为它们很长)。

我需要为特定字段提升此more important值。我们可以用功能评分或任何其他方式做到这一点吗?

1 个答案:

答案 0 :(得分:0)

长度上的一个术语差异与评分算法的差别很大(事实上,由于长度规范的不精确,可能完全消失)。如果其他领域有点击,你有很多得分元素可以对抗。

dis_max可能是一种合理的方法。您将尝试克服所有附加分数和坐标,而不是所有附加分数和坐标,它将简单地选择最佳匹配子查询的分数。如果您针对标题提升查询,则可以确保强烈偏好的匹配。

然后您可以指定一个“tie_breaker”,这样只有当“标题”分数相关时才会考虑针对描述子查询的分数。

{
    "dis_max" : {
        "tie_breaker" : 0.2,
        "queries" : [
            {
                "terms" : { 
                    "age" : ["iphone", "charger"],
                    "boost" : 10
                }
            },
            {
                "terms" : {
                    "description" : ["iphone", "charger"]
                }
            }
        ]
    }
}

如果您完全知道何时与整个字段完全匹配,那么此类事情的另一种方法是单独索引该字段的未加标签版本,并查询该字段。与该字段的未加密版本的任何匹配将与整个字段内容完全匹配。这可以防止你需要依靠长度规范来做出决定。