【发布时间】:2019-11-22 00:20:54
【问题描述】:
我的文档由类别组成。有 40 个不同的类别,这些类别被手动添加到数据库中的文档中并被索引。这是我的文档的样子:
{
"name": "..",
"categoryA": "..",
"categoryB": "..",..
"categoryDecayScore": 0.0 - 1.0
}
如果文档属于所有 40 个类别的一部分,则认为这些文档涵盖得很好。因此,为了将所有类别的文档推到顶部,我想使用衰减函数来降低那些属于较少类别的人的分数。
为此,我使用在索引时设置的categoryDecayScore 属性。如果文档是所有 40 个类别的一部分,则它的 categoryDecayScore 将是 0.0 如果它缺少一半但超过 1/3,它将获得 0.2 的分数,如果它少于 1/3,它将获得0.3 的分数。
然后我还将categoryDecayScore 增加 0.02 以减少相关分数。
我想做的事:
我希望拥有categoryDecayScore > 0.0 的文档的分数越远离0.0。
这是我的过滤功能:
"filter": {
"exp": {
"categoryDecayScore" : {
"origin" : 0.0,
"scale" : 1.0,
"offset" : 0.0,
"decay" : 0.5
}
}
}
我在这里理解文档的方式:
https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html
origin 是我的参考点吗,所有具有categoryDecayScore > 0.0 的文档都将被衰减,任何具有categoryDecayScore >= 1.0 的文档都将被0.5 衰减。
但是从我的结果来看,这似乎没有影响。前 4 个文档都有相同的分数,但这里是 categoryDecayScore 值:
{
_score: 51.970146,
categoryDecayScore: 0.04
},
{
_score: 51.970146,
categoryDecayScore: 0.2
},
{
_score: 51.970146,
categoryDecayScore: 0.02
},
{
_score: 51.970146,
categoryDecayScore: 0.3
}
这是正常行为还是我对衰减函数的理解不正确。我基于文档的假设是:
- origin:计算距离的参考点
- scale:所有文档在该点之后按衰减参数的值衰减
- 偏移量:文档衰减的点
- 衰减:所有文档的衰减量高于或等于刻度值
注1:
使用解释标志,我注意到这些 exp 设置的评估衰减分数始终为 1。所以 51.. 分数只是文本匹配分数。
【问题讨论】:
标签: elasticsearch elasticsearch-6