У меня довольно большой запрос Elasticsearch.Перефразируя, этот запрос возвращает совпадающих «консультантов» и сортирует их следующим образом:
- расстояние
- в зависимости от своего офиса, консультанты могут совместно использовать офисы и иметь точно такие жедистанционное значение, сначала показывают консультанты в ближайшем офисе)
- офисные руководители
- логическое поле, консультант является лидером или нет, этоСортировка подтолкнет руководителей офисов к «офисной» вершине их офиса
- всех оставшихся консультантов
В качестве примера, для меня (на основев Лондоне) я мог бы получить что-то вроде этого:
1. [London office leader]
2. [London consultant]
3. [London consultant]
4. [London consultant]
5. [Paris office leader]
6. [Paris consultant]
7. ...etc
Моя задача здесь состоит в том, чтобы раздел «все оставшиеся консультанты» содержал сбалансированное сочетание мужчин и женщин (т.е. у нас нет группыо мужчинах, то о группе женщин, а лучше распределить их более равномерно).
Я пытался использовать сортировку сценариев для «повышения» консультантов с помощью вычисления gender === F || id is odd
;Идея заключалась в том, что все женщины будут усилены, и процент мужчин также будет повышен.Тем не менее, это не очень хорошо работает и приводит к «группировке» женщин (то есть мужчины, затем девяти женщин, затем двух мужчин и других женщин).
Я открыт для предложений, ноМоя текущая идея относительно того, как подойти к этому, состоит в том, чтобы вручную указать «шаблон», например что-то вроде:
MFMFMMFMFFFMFMMFFMFMMFMFFFMFMF
и заставить ES отсортировать результаты так, чтобы шаблон был удовлетворен.
Моя конечная цель - отсортировать что-то вроде этого:
London
leaders (sorted by M/F pattern)
others (sorted by M/F pattern)
Paris
leaders (sorted by M/F pattern)
others (sorted by M/F pattern)
Здесь я немного застрял - я уверен, что могу написать сортировку script
, но я думаю, что мне нужен контекст внедокумент, который в настоящее время сортируется, например, глобальная ссылка, чтобы узнать, что уже было отсортировано.
Набор результатов разбит на страницы, поэтому мое решение должно гарантировать, что порядок каждый раз одинаков (или, по крайней мере, согласован длясеанс).
Любая помощь приветствуется, даже если она просто указывает мне направление определенного алгоритма, о котором я даже не думал.