我有一个很大的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
排序,但是我认为我需要当前正在排序的文档之外的上下文,例如全局参考,以了解已排序的内容。
对结果集进行了分页,因此我的解决方案需要确保每次的顺序都是相同的(或至少对于会话而言是一致的)。
任何帮助都会感激,即使它只是将我指向没有想到的特定算法的方向。