elasticsearch-使用属性值衰减文档

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)

我在这里了解文档的方式:

https://www.elastic.co/guide/zh-CN/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
}
Run Code Online (Sandbox Code Playgroud)

这是正常现象还是我对衰减函数的理解不正确。我基于文档的假设是:

  • 原点:计算距离的参考点
  • 比例尺:所有点均按衰减参数值衰减的最高点
  • 偏移量:文档衰减之后的点
  • 衰减:所有得分高于或等于标度值的文档的衰减量

注1:

使用注释标记,我注意到那些exp设置的评估衰减分数始终为1。因此51 ..分数仅仅是文本匹配分数。

Ste*_*ess 2

我的查询是正确的。问题是我的范围 0.0 - 1.0 太小了。所以我决定使用整数而不是小数,范围从 0 到 1000。对于排除,我将原点设置为 100 而不是 0。这返回了预期的结果。