如何按自定义值然后按 _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
搜索文档和排序结果,但是我想按以下顺序排序匹配记录:
- 管理员(第一个)
- 成员(第二 - 仅次于管理员)
- 来宾(最后 - 在管理员和成员之后)
我想使用 _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"
}
}
]
我的文档是这样的:
{
...
user: {
name: "some_name",
role: "admin" // this can be "admin", "member" or "guest"
}
...
}
我知道如何通过 _score
搜索文档和排序结果,但是我想按以下顺序排序匹配记录:
- 管理员(第一个)
- 成员(第二 - 仅次于管理员)
- 来宾(最后 - 在管理员和成员之后)
我想使用 _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"
}
}
]