sorting - 可以在Elasticsearch查询中完成吗?

标签 sorting elasticsearch ranking elastica

我目前正在通过将分数插入Elastic Search之前预先计算一个分数来解决此问题。但是,由于它是基于日期的,因此我必须每天重新计算分数。在查询期间可以进行此计算吗?

数据:

{
    "title" : "event 1",
    "rank" : 1034, // pre-calculated score
    "score": 34,
    "date" : "2015-10-10 00:00:00",
    "meta" : [
        {
            "date": "2015-10-10 00:00:00",
            "type": "insert"
        },
        {
            "date": "2015-12-10 00:00:00",
            "type": "outsert"
        },
        {
            "date": "2015-05-10 00:00:00",
            "type": "other"
        }       
    ]
}

排行:

使用insert日期创建了4个“存储桶”。
  • 不到5天的 Activity
  • 超过5天且未满10天的 Activity
  • 超过10天且未满15天的 Activity
  • 超过15天的 Activity

  • 每个存储桶中的事件都需要通过score字段DESC进行排序。

    预先计算的排名是根据事件所属的存储桶,在得分上加上1000、2000或3000。

    进行查询时,结果将按等级排序。

    不使用预先计算的rank怎么办?

    最佳答案

    我想您可以实现这一目标。您当前的预定义计分逻辑的真正痛苦在于,您不能在事件数据在其当前存储桶中过期后向后移动。因为您的存储桶遵循5天的天差对称性。请对线性天使用函数评分,规模-5天。
    https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html

    {
     "gauss": {
            "date_field": {
                  "origin": "2013-09-17", 
                  "scale": "5d",
                  "offset": "0d", 
                  "decay" : 0.5 
                }
            }
        }
    

    查询数据时,将原点替换为当前日期。根据共享链接设置boost_mode和score_mode。
    希望这行得通。

    关于sorting - 可以在Elasticsearch查询中完成吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33888487/

    相关文章:

    elasticsearch - Kibana数据表中的条件总和度量(小计列)

    database - 在 SQL Server 中优化索引以进行排名

    swift 2 集合用于按值对键值对进行排序

    python - 按顺时针点坐标排序

    带有获取查询的 Python 分页

    elasticsearch - 您必须设置 ES_CLASSPATH 变量

    php - 按索引对 stdClass 对象进行排序

    python - 属性错误 : generator object has no attribute 'sort'

    php - 以有效的方式计算行排名

    php - 对总计未存储在数据库中的值的总和进行排名