我的用例是这样的:
对于查询iphone charger
,我得到的结果与name
,iphone charger coupons
比名称iphone charger
更高,可能是因为description
和其他领域。除非我大幅度地歪曲重要性,否则提升name
字段并没有多大帮助。我真正需要的是tf/idf
字段内的name
提升
引用elasticsearch blog:
字段中术语的频率被字段的长度偏移。但是,实用的评分功能以相同的方式处理所有字段。它会将所有标题字段(因为它们很短)视为比所有正文字段更重要(因为它们很长)。
我需要为特定字段提升此more important
值。我们可以用功能评分或任何其他方式做到这一点吗?
答案 0 :(得分:0)
长度上的一个术语差异不与评分算法的差别很大(事实上,由于长度规范的不精确,可能完全消失)。如果其他领域有点击,你有很多得分元素可以对抗。
dis_max可能是一种合理的方法。您将尝试克服所有附加分数和坐标,而不是所有附加分数和坐标,它将简单地选择最佳匹配子查询的分数。如果您针对标题提升查询,则可以确保强烈偏好的匹配。
然后您可以指定一个“tie_breaker”,这样只有当“标题”分数相关时才会考虑针对描述子查询的分数。
{
"dis_max" : {
"tie_breaker" : 0.2,
"queries" : [
{
"terms" : {
"age" : ["iphone", "charger"],
"boost" : 10
}
},
{
"terms" : {
"description" : ["iphone", "charger"]
}
}
]
}
}
如果您完全知道何时与整个字段完全匹配,那么此类事情的另一种方法是单独索引该字段的未加标签版本,并查询该字段。与该字段的未加密版本的任何匹配将与整个字段内容完全匹配。这可以防止你需要依靠长度规范来做出决定。