Reputation: 15424
My document looks like this:
{
...
user: {
name: "some_name",
role: "admin" // this can be "admin", "member" or "guest"
}
...
}
I know how to search for documents and ordering results by _score
however I would like to order matching records in this order:
And I would like to use _score
as a second ordering parameter.
Upvotes: 1
Views: 168
Reputation: 52368
You can use a _script
based scoring:
{
"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"
}
}
]
}
OR, if you don't mind and can do this, you can create a new field in your index where you place for each role a number - like I did in the script above. Then, in your queries you don't use scripting, but
"sort": [
{
"role_ID_field": {
"order": "asc"
}
},
{
"_score": {
"order": "desc"
}
}
]
Upvotes: 1