按特定的手动定义模式对Elasticsearch结果进行排序

时间:2019-01-30 15:28:03

标签: sorting elasticsearch

我有一个很大的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排序,但是我认为我需要当前正在排序的文档之外的上下文,例如全局参考,以了解已排序的内容。

对结果集进行了分页,因此我的解决方案需要确保每次的顺序都是相同的(或至少对于会话而言是一致的)。

任何帮助都会感激,即使它只是将我指向没有想到的特定算法的方向。

0 个答案:

没有答案