组合过滤器和函数\u分数-elasticsearch不会计算分数?

6yt4nkrj  于 2021-06-14  发布在  ElasticSearch
关注(0)|答案(1)|浏览(340)

我有 posts 索引,我想
a) 按日期过滤掉所有帖子,即只返回在给定日期之前创建的帖子 date b) 应用 function_score 结果如何。
我提出了一个类似这样的问题:

get posts/_search
{
  "query": {
    "function_score": {
      "query": {
        "bool": {
          "filter": [
            {
              "range": {
                "created_at": {
                  "lte": "2020-09-12T17:23:00Z"
                }
              }
            }
          ]
        }
      },
      "functions": [
        {
          "field_value_factor": {
            "field": "likes",
            "factor": 0.1,
            "modifier": "ln1p",
            "missing": 1
          }
        }
      ],
      "score_mode": "sum"
    }
  },
  "from": 0,
  "size": 10
}

然而,问题是ElasticSearch并没有对结果应用score,所有文档都有 0.0 分数。我可以通过将filter移到函数中来“欺骗”es,然后它就工作了,但是我觉得它不是最优的,你知道为什么上面的查询不会返回分数吗?
“作弊”查询的示例,该查询计算每个文档的分数:

get posts/_search
{
  "query": {
    "function_score": {
      "functions": [
        {
          "filter": {
            "range": {
              "created_at": {
                "lte": "2020-09-12T17:22:58Z"
              }
            }
          },
          "weight": 100
        },
        {
          "gauss": {
            "created_at": {
              "origin": "2020-09-12T17:22:58Z",
              "scale": "1h",
              "decay": 0.95
            }
          }
        },
        {
          "field_value_factor": {
            "field": "likes",
            "factor": 0.1,
            "modifier": "ln1p",
            "missing": 1
          }
        }
      ]
    }
  },
  "from": 0,
  "size": 10
}
n3h0vuf2

n3h0vuf21#

过滤器不影响分数。只有0或1。为了能够影响分数,你必须使用一个计算分数的函数(匹配,匹配短语,地理查询等等),你可以在文档中有更多关于上下文的细节
字段\u值\u因子会影响现有分数,但在第一次查询中,此阶段没有任何分数,因为它几乎与按相同数量排序相同。
在第二个查询中,根据文档的最新情况计算一个分数,然后用likes来影响它。这就是为什么它有效。

相关问题