如何按自定义值然后按 _score 对结果进行排序

How to order results by custom value and then by _score

我的文档是这样的:

{
  ...
  user: {
    name: "some_name", 
    role: "admin" // this can be "admin", "member" or "guest"
  }
  ...
}

我知道如何通过 _score 搜索文档和排序结果,但是我想按以下顺序排序匹配记录:

  1. 管理员(第一个)
  2. 成员(第二 - 仅次于管理员)
  3. 来宾(最后 - 在管理员和成员之后)

我想使用 _score 作为第二个排序参数。

您可以使用基于 _script 的评分:

{
  "query": {
    // whatever
  },
  "sort": [
    {
      "_script": {
        "script": "if(doc['role'].value=='admin') return 1; else if(doc['role'].value=='member') return 2; else if(doc['role'].value=='guest') return 3;",
        "type": "number",
        "order": "asc"
      }
    },
    {
      "_score": {
        "order": "desc"
      }
    }
  ]
}

或者,如果您不介意并且可以这样做,您可以在索引中创建一个新字段,在其中为每个角色放置一个数字 - 就像我在上面的脚本中所做的那样。然后,在您的查询中您不使用脚本,但是

"sort": [
    {
      "role_ID_field": {
        "order": "asc"
      }
    },
    {
      "_score": {
        "order": "desc"
      }
    }
  ]