ElasticSearch中的条件排序

Jav*_*uzi 12 sorting mvel date-sorting elasticsearch

我有一些文件,我想在日期字段上排序.对于日期等于指定日期的文档,今天的示例以及之后的所有日期,我希望按升序排序.对于指定日期之前的日期,我想按降序排序.

这在ElasticSearch中是否可行?如果是这样,你可以建议任何文献或方法.

date的类型为"date",格式为"dateOptionalTime".

谢谢

jam*_*esc 14

是的,这可以在ElasticSearch中使用脚本进行排序或评分.

我的偏好是评分脚本,因为"基于脚本的分数"会更快(根据文档).

使用评分脚本,您可以将Unix时间戳用于类型的日期字段int/longcustom_score查询中的mvel排序脚本.您可能需要重新索引文档.您还需要能够将搜索到的时间转换为Unix时间戳,以便在ElasticSearch中进行抽取.

然后,排序脚本将从每个文档的时间戳中扣除所请求的时间戳并创建绝对值.然后结果按升序排序 - 最低'距离'是最好的.

因此,在查找大约一年前的文档时,它看起来像:

"query": {
    "custom_score" : {
        "query" : {
            ....
        },
        "params" : {
            "req_date_stamp" : 1348438345,
        },
        "script" : "abs(doc['timestamp'].value - req_date_timestamp)"
    }
},
"sort": {
    "_score": {
        'order': 'asc'
    }
}
Run Code Online (Sandbox Code Playgroud)

(为我的JSON中的任何错误道歉 - 我测试了这个想法pyes)

您可能需要调整此方法以使舍入正确 - 例如,您的问题提到匹配的天数,因此您可能希望将时间戳生成器舍入到最近的一天.

对于"完整"信息,您可以查看自定义分数查询文档,并按照MVEL脚本的链接进行操作.