我的用例是这样的:对于查询iphone charger
,我对结果的相关性更高,拥有name
、iphone charger coupons
而不是名称iphone charger
,这可能是因为在description
和其他字段中匹配得更好。增强name
字段没有多大帮助,除非我大幅度歪曲了重要性。我真正需要的是tf/idf
boost在name
字段中
引用elasticsearch 博客
字段中项的频率被字段的长度所抵消。然而,实际的评分函数以同样的方式处理所有字段。它将把所有标题字段(因为它们是短的)当作比所有身体字段更重要的字段(因为它们是长的)。
我需要提高特定字段的more important
值。我们能用功能评分或其他方法来做这件事吗?
发布于 2015-07-02 10:10:02
长度上的一个术语差异与评分算法没有多大区别(事实上,由于长度范数不精确而可能完全消失)。如果有其他领域的命中,你有很多得分元素可供对抗。
对此,最大值可能是一种合理的方法。它将简单地选择最佳匹配子查询的分数,而不是所有的加性分数和和弦等等。如果您提高了对标题的查询,则可以确保匹配具有强烈的首选。
然后,您可以分配一个"tie_breaker",这样,只有在“标题”分数相匹配时,才会考虑到description子查询的得分。
{
"dis_max" : {
"tie_breaker" : 0.2,
"queries" : [
{
"terms" : {
"age" : ["iphone", "charger"],
"boost" : 10
}
},
{
"terms" : {
"description" : ["iphone", "charger"]
}
}
]
}
}
另一种解决这类问题的方法,如果您完全知道什么时候与整个字段完全匹配,则分别对该字段的未标记版本进行索引,并查询该字段。与未标记的字段版本的任何匹配都将再次与整个字段内容完全匹配。这将防止您需要依赖长度规范来作出这种决定。
https://stackoverflow.com/questions/31188131
复制