【问题标题】:Elasticsearch -- determine if a given time is within a TIME rangeElasticsearch -- 确定给定时间是否在 TIME 范围内
【发布时间】:2019-07-15 09:03:26
【问题描述】:

弹性搜索:v7.2
应用:Laravel v5.7

我正在尝试查询我的文档是否属于某个时间范围

这是我的索引的mav_time_aired 字段映射:


现在我想过滤或获取某个时间范围内的文档(我想检索具有mav_time_aired 值的文档在06:00:0009:00:00 OR 18:00:00 到@ 987654333@,所以我有这样的查询:

$temp =
[
    "bool" => [
        "should" => [
            [
                "range" => [
                    "mav_time_aired" => [
                        "gte" => "06:00:00",
                        "lte" => "09:00:00",
                        'format' => "HH:mm:ss",
                    ]
                ]
            ],
            [
                "range" => [
                    "mav_time_aired" => [
                        "gte" => "18:00:00",
                        "lte" => "22:00:00",
                        'format' => "HH:mm:ss",
                    ]
                ]
            ]

        ]
    ]
];

使用format 属性,根据文档,我必须能够将文档的数据格式化为我想要的格式。

现在有了给定的查询,我希望我应该能够获取我想要的输出,但不幸的是,查询结果是:

No result foundEmpty

但是查看我的文件,我有这些文件:

(这些只是我确定应该检索的文档中的 2 个)

我是否错过了 Elasticsearch 查询中的某些内容?

【问题讨论】:

标签: elasticsearch


【解决方案1】:

因为这还没有升级,所以我采取了一些硬编码script elasticsearch 为其用户提供的工作

我做了一个类似这样的代码:

$temp =
[
    "bool" => [
        "must" => [
            "script" => [
                "script" => [
                    "source" => "(doc['mav_time_aired'].value.getHour() >= 6 && !(doc['mav_time_aired'].value.getHour() >= 9 && doc['mav_time_aired'].value.getMinute() >= 0)) || (doc['mav_time_aired'].value.getHour() >= 18 && !(doc['mav_time_aired'].value.getHour() >= 22 && doc['mav_time_aired'].value.getMinute() >= 0))",
                    "lang" => "painless"
                ]
            ]
        ]
    ]
];

对于 else 我只是添加了 Elasticsearch 的 must_not 布尔查询:

$temp =
[
    "bool" => [
        "must_not" => [
            "script" => [
                "script" => [
                    "source" => "(doc['mav_time_aired'].value.getHour() >= 6 && !(doc['mav_time_aired'].value.getHour() >= 9 && doc['mav_time_aired'].value.getMinute() >= 0)) || (doc['mav_time_aired'].value.getHour() >= 18 && !(doc['mav_time_aired'].value.getHour() >= 22 && doc['mav_time_aired'].value.getMinute() >= 0))",
                    "lang" => "painless"
                ]
            ]
        ]
    ]
];

然后我就可以获取我想要的文件了

【讨论】:

    猜你喜欢
    • 2016-02-14
    • 2021-07-07
    • 1970-01-01
    • 1970-01-01
    • 2017-01-11
    • 2011-09-08
    • 1970-01-01
    • 1970-01-01
    • 2010-10-26
    相关资源
    最近更新 更多