首页 > 解决方案 > Elasticsearch - 按日期字段按特定输入日期升序的脚本排序

问题描述

假设我有这种文件(事件):

[
    {
        "title": "Foo",
        "dates": [
            "2019-07-01",
            "2019-07-15",
            "2019-08-01"
        ]
    },
    {
        "title": "Bar",
        "dates": [
            "2019-07-18"
        ]
    }
]

我想执行搜索以查找给定日期范围内发生的所有事件,因此我搜索在 7 月 10 日(2019-07-10)和 8 月 10 日(2019-08-10)之间发生的所有事件)。

查询不会是问题,但如果我想按升序显示事件(所以“Foo”事件排在前面,因为 7 月 15 日在 18 日之前) - 我该如何正确排序?

我考虑过使用脚本对我的文档进行排序,也许是通过过滤日期以便只保留有效日期,然后使用第一个日期值的时间戳进行简单的数字排序。但是我将如何通过脚本过滤日期?

我可以使用“脚本字段”并传递我的 fromDate 和 toDate 将过滤后的日期复制到一个新字段(比如说validDates)并使用该字段进行排序吗?

顺便说一句:索引将只包含几千个事件。

更新:

经过一些研究,看起来如果不使用嵌套对象而不是数组,就无法做到这一点。如果我错了,请纠正我,我宁愿在嵌套类型上使用简单的日期数组...

标签: elasticsearch

解决方案


推荐阅读