Ste*_*ess 7 elasticsearch elasticsearch-6
我的文件是按类别组成的。有40种不同的类别将这些类别手动添加到数据库中的文档中并建立索引。这是我的文档的样子:
{
"name": "..",
"categoryA": "..",
"categoryB": "..",..
"categoryDecayScore": 0.0 - 1.0
}
Run Code Online (Sandbox Code Playgroud)
如果这些文件属于所有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
}
}
}
Run Code Online (Sandbox Code Playgroud)
我在这里了解文档的方式:
这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
}
Run Code Online (Sandbox Code Playgroud)
这是正常现象还是我对衰减函数的理解不正确。我基于文档的假设是:
注1:
使用注释标记,我注意到那些exp设置的评估衰减分数始终为1。因此51 ..分数仅仅是文本匹配分数。
我的查询是正确的。问题是我的范围 0.0 - 1.0 太小了。所以我决定使用整数而不是小数,范围从 0 到 1000。对于排除,我将原点设置为 100 而不是 0。这返回了预期的结果。
| 归档时间: |
|
| 查看次数: |
138 次 |
| 最近记录: |