ElasticSearch评分函数取决于邻居文档

时间:2015-07-07 08:56:29

标签: elasticsearch

我有一个带有2个映射(类型)的ElasticSearch索引。 在应用程序中,我需要显示包含两种类型项目的分页Feed。 目前,这些项目仅按创建日期排序,但我也希望控制项目在页面上如何相互交替。 例如,我想为序列设置一个规则“A类型的3个项目,B类型的1个项目,依此类推”。 我需要它来确保两种类型的项目都显示在每个页面上,并在页面上平均分配。

但据我所知,无法在自定义分数功能脚本中访问其他文档。

当然,直接在app逻辑中实现很容易,但是不清楚如何使用这种方式实现分页。

关于如何实现这一目标的任何想法?

1 个答案:

答案 0 :(得分:0)

我认为你不能这样做。

一种方法(不起作用)是在脚本中保留一个全局变量,并在每个文档被返回/处理后递增。然后取这个数字,除以3得到模数。根据此数字,对文档进行排序。 “全局”变量在sripts中是不可能的。

我能想到的唯一两种方法是使用脚本生成一个随机数并根据它进行排序。通过这种方式,您可以获得“混合类型列表。”

或者,如果您想要对文档进行排序的最小确定性方法,仍然在脚本中将文档的ID(您说是一个数字)取模3并使用该值进行排序。

对于随机方法:

  "sort": [
    {
      "date": {
        "order": "desc"
      }
    },
    {
      "_script": {
        "script": "Math.random()",
        "type": "number",
        "order": "asc"
      }
    }
  ]