2015-01-19 2 views
1

Моего документа выглядят следующим образом:Как заказать результаты по таможенной стоимости, а затем по _SCORE

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

Я знаю, как для поиска документов и упорядочения результатов по _score однако я хотел бы заказать соответствующие записи в этом порядке :

  1. администраторов (первые)
  2. членов (второй - после того, как админы)
  3. гостей (последний - после админов и членов)

И я хотел бы использовать _score в качестве второго параметра порядка.

ответ

1

Вы можете использовать счет в _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" 
     } 
    } 
    ] 
Смежные вопросы