在 Elasticsearch 中,如何通过排名(第一、第二、第三……)字段的值来提高分数?

In Elasticsearch, how do you boost a score by the value of a ranking (1st, 2nd, 3rd...) field?

我在文档中有一个字段是排名:值越低,得分越高。第一个是最好的,但最后一个是最坏的。所以排名1比100万好

到目前为止,我已经能够使用 score_query and field_value_factor 提升字段值本身,但它为排名较高的文档提供了更高的提升。

"field_value_factor": {
  "field": "rank",
  "factor": 1.2,
  "modifier": "sqrt",
  "missing": 1
}

我应该使用不同的修饰符吗?还是我完全错了?另外,我不想单独对它进行排序,因为我还有其他因素影响 _score.

实际上你需要取一个修饰函数来往复rank值,即1 / rank,这样等级越高,值就会越低,rank = 1 将得到 1 分。唯一做到这一点的是 reciprocal

"field_value_factor": {
  "field": "rank",
  "factor": 1.2,
  "modifier": "reciprocal",
  "missing": 1
}